[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Форум Panda3D - по русски » Panda3D » Для начинающих » ДеЦЦкий сад "ПандЁнок"
ДеЦЦкий сад "ПандЁнок"
KornivalДата: Вторник, 13.09.2011, 00:23 | Сообщение # 166
Лейтенант
Группа: Пользователи
Сообщений: 40
Награды: 0
Репутация: 1
Статус: Offline
Quote (serg-kkz)
Или расскажи суть проблемы подробней, может что и придумаем.

Да в этом и есть суть проблемы: указывать не в отношении, а в координатах. Надеюсь ninth знает лекарство wacko
 
serg-kkzДата: Вторник, 13.09.2011, 00:40 | Сообщение # 167
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
Quote (Kornival)
Да в этом и есть суть проблемы: указывать не в отношении, а в координатах. Надеюсь ninth знает лекарство

Ну тогда лекарство нет. Ты хочешь работать с изображением как в редакторе? Вот так можно растянуть изоброжение на весь экран, просто.

Code
# -*- coding: utf-8 -*-  
from pandac.PandaModules import *
import direct.directbase.DirectStart
from direct.gui.DirectGui import *

fon = DirectFrame(image=('1.png')) # фрейм для картинки для фона
fon.setScale(base.getAspectRatio(), 1, 1)

run()


вот эту:
Прикрепления: 0831413.png (1.0 Kb)


ООП  -  

Сообщение отредактировал serg-kkz - Вторник, 13.09.2011, 00:47
 
KornivalДата: Вторник, 13.09.2011, 00:58 | Сообщение # 168
Лейтенант
Группа: Пользователи
Сообщений: 40
Награды: 0
Репутация: 1
Статус: Offline
Quote (serg-kkz)
Ты хочешь работать с изображением как в редакторе? Вот так можно растянуть изоброжение на весь экран, просто.

Нет, не растянуть, а нарисовать одно и то же изображение много раз так, чтобы оно заполнило экран. Но это частный случай, вообще-то мне нужна возможность устанавливать точные координаты отрисовки рисунка в пикселях.
 
serg-kkzДата: Вторник, 13.09.2011, 01:05 | Сообщение # 169
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
Тайлы!!! Скорее в панде должно это быть, но панда не предназначена для 2D игр. Нужна прям позиция? можно создать массив с ключами тайлов. Словарь к примеру.

ООП  -  
 
KornivalДата: Вторник, 13.09.2011, 01:11 | Сообщение # 170
Лейтенант
Группа: Пользователи
Сообщений: 40
Награды: 0
Репутация: 1
Статус: Offline
Quote (serg-kkz)
но панда не предназначена для 2D игр

Похоже на то, жалко будет если не удастся решить проблему.
Quote (serg-kkz)
Нужна прям позиция?

Да, на этом очень многое завязано в играх на основе сетки.
 
ninthДата: Вторник, 13.09.2011, 08:09 | Сообщение # 171
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Я же пояснил в посте как это сделать. Ладн, чуть позже дам пример.
 
ninthДата: Вторник, 13.09.2011, 09:18 | Сообщение # 172
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Code
# -*- coding: utf-8 -*-
import sys
from random import random
from panda3d.core import *
import direct.directbase.DirectStart

# -------------- Создание собственного аспекта ------------------
# Наш собственный аспект с блекдж... э... с позицией и масштабом
my_aspect = render2d.attachNewNode('my_aspect')
my_aspect.setPos(-1, 0, -1)

# Обработка события на ресайз окна
def onResize(*args):
     if base.win.isClosed():
         sys.exit()
     win_p = base.win.getProperties()
     my_aspect.setScale(1.0/win_p.getXSize(), 1.0, 1.0/win_p.getYSize())
# Регистрация обработки
base.accept('window-event', onResize)

# --------------- Пример работы --------------------------------
# Создаём образец тайла 40х40 пикселов
cm = CardMaker('cm')
cm.setFrame(0, 40, 0, 40)
tile = NodePath(cm.generate())

# Затайливаем поле 10х10
tiles = []
for x in xrange(10):
     for y in xrange(10):
         tiles.append(tile.copyTo(my_aspect))
         tiles[-1].setColor(random(),random(),random())
         tiles[-1].setPos(x * 40, 1, y * 40)

run()


В данном случае 0,0 - нижний левый угол оси +X, +Y

Можно поступить проще - не создавая свой аспект, а вешать всё на pixel2d (tile.copyTo(pixel2d)), но в этом случае ось Y будет инвертирована, т.е. тебе надо координату Y задавать отрицательную, а начало координат будет в левом верхнем углу.
 
KornivalДата: Вторник, 13.09.2011, 09:31 | Сообщение # 173
Лейтенант
Группа: Пользователи
Сообщений: 40
Награды: 0
Репутация: 1
Статус: Offline
Спасибо большое, а вариант с началом координат в верхнем левом углу для меня самый привычный, буду переделывать под С++
ЗЫ Я что единственный на этом сайте кто задает вопросы?:)
 
ninthДата: Вторник, 13.09.2011, 09:32 | Сообщение # 174
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Соррь, ошибочка - вместо my_aspect.setScale(1.0/win_p.getXSize(), 1.0, 1.0/win_p.getYSize()) надо
my_aspect.setScale(2.0/win_p.getXSize(), 1.0, 2.0/win_p.getYSize())

пример использования аналогичный тому, что ты привёл:
Code
# --------------- Пример работы --------------------------------
# Создаём образец тайла 32х32 пикселов
cm = CardMaker('cm')
cm.setFrame(0, 32, 0, 32)
tile = NodePath(cm.generate())

# Затайливаем поле  
tiles = []
win_p = base.win.getProperties()
for x in xrange(int(win_p.getXSize()/32)):
      for y in xrange(win_p.getYSize()/32):
          tiles.append(tile.copyTo(my_aspect))
          tiles[-1].setColor(random(),random(),random())
          tiles[-1].setPos(x * 32, 1, y * 32)
 
ninthДата: Вторник, 13.09.2011, 09:35 | Сообщение # 175
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
По поводу начала координат - просто используется стандартная декартова система (положительное направление вправо и вверх), с этим в данном случае ничего не сделаешь, по крайней мере я не знаю как это изменить ) Разве что поставить отрицательный масштаб по У, но это будет эффект зеркала.
По вопросам - ну большинство предпочитает питон, там вроде с ним и так более-менее всё ясно )
 
KornivalДата: Вторник, 13.09.2011, 09:38 | Сообщение # 176
Лейтенант
Группа: Пользователи
Сообщений: 40
Награды: 0
Репутация: 1
Статус: Offline
Так тоже нормально.
 
3BiPДата: Вторник, 20.09.2011, 20:13 | Сообщение # 177
Сержант
Группа: Пользователи
Сообщений: 37
Награды: 0
Репутация: 0
Статус: Offline
Quote (ninth)
Урок №1


Доброе время суток!
Вспомните кто можт первый урок и подскажите из-за чего ошибка?(в прикрепленном файле)

Код проверял, вроде все норм...

Подскажите плз
Прикрепления: 42.bmp (348.8 Kb)



 
ninthДата: Вторник, 20.09.2011, 20:20 | Сообщение # 178
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Не загрузилась карта высот - проверяй правильность имени и наличие её в папке.
 
3BiPДата: Вторник, 20.09.2011, 20:33 | Сообщение # 179
Сержант
Группа: Пользователи
Сообщений: 37
Награды: 0
Репутация: 0
Статус: Offline
Да все вроде правильно, в мэйне путь 'res/textures/heightfield.png' и файлик такой имеется...и компелятор не ругается...
Проверьте плз что не так(все прилогаеться)
Прикрепления: megarpg.7z (62.1 Kb)





Сообщение отредактировал 3BiP - Вторник, 20.09.2011, 20:39
 
ninthДата: Вторник, 20.09.2011, 20:51 | Сообщение # 180
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Хм. У меня всё без вопросов загрузилось.
А, кажется фтыкнул - путь прописан относительный, а ты запускаешь питон из папки 'Documents and Setting/user'. Если коротко, то перейди сначала в папку с игрой в командной строке, а потом уже запускай. А лучше, чтобы не извращаться с запуском через командную строку, создай в папке с файлом main.py батник run.bat, содержащий команду запуска. Примерно так:
Code
ppython "main.py"
pause
 
Форум Panda3D - по русски » Panda3D » Для начинающих » ДеЦЦкий сад "ПандЁнок"
Поиск: