ДеЦЦкий сад "ПандЁнок"
|
|
Kornival | Дата: Вторник, 13.09.2011, 00:23 | Сообщение # 166 |
Лейтенант
Группа: Пользователи
Сообщений: 40
Награды: 0
Репутация: 1
Статус: Offline
| Quote (serg-kkz) Или расскажи суть проблемы подробней, может что и придумаем. Да в этом и есть суть проблемы: указывать не в отношении, а в координатах. Надеюсь ninth знает лекарство
|
|
| |
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()
вот эту:
ООП -
Сообщение отредактировал 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
|
Доброе время суток! Вспомните кто можт первый урок и подскажите из-за чего ошибка?(в прикрепленном файле)
Код проверял, вроде все норм...
Подскажите плз
Прикрепления:
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' и файлик такой имеется...и компелятор не ругается... Проверьте плз что не так(все прилогаеться)
Сообщение отредактировал 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
|
|
| |