[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум Panda3D - по русски » Panda3D » Примеры кода » Управление камерой, свободная (Камера для обзора уровней.)
Управление камерой, свободная
serg-kkzДата: Среда, 06.07.2011, 18:01 | Сообщение # 1
Генерал-лейтенант
Группа: Модераторы
Сообщений: 678
Награды: 3
Репутация: 16
Статус: Offline
Привожу пример свободной камеры, т. к. базовая не очень удобная.

Управление:

Зажать правою кнопку мыши.
Перемещение кнопками: W - вперёд, S - назад, A - влево, D - вправо, Q - вверх, E - вниз, Shift - ускорение,
колёсико мыши - скорость.

Пример использования:
Code
import direct.directbase.DirectStart
from camera import CamFree

environ = loader.loadModel("models/environment")
environ.reparentTo(render)
environ.setScale(0.25,0.25,0.25)
environ.setPos(-8,42,-10)

CamFree()
run()

Файл модуля разместить в одной папке с программой.

Обновлено с учетом предложенного в посте №2, ninth'ом
Прикрепления: camera.py(4Kb)


Сообщение отредактировал serg-kkz - Суббота, 09.07.2011, 17:17
 
ninthДата: Четверг, 07.07.2011, 00:31 | Сообщение # 2
Admin
Группа: Администраторы
Сообщений: 1554
Награды: 5
Репутация: 46
Статус: Offline
Наверно стоило бы настройки скорости вращения, перемещения и ускорения вынести отдельными константами класса и в обработке присваивать уже их.
 
serg-kkzДата: Четверг, 07.07.2011, 10:19 | Сообщение # 3
Генерал-лейтенант
Группа: Модераторы
Сообщений: 678
Награды: 3
Репутация: 16
Статус: Offline
Не совсем понял про вынос их в основную программу, я правильно тебя понял? В принципе можно и в модуле их менять, например на доп кнопки повесить изменение переменных, скорость - колёсико мышки, скорость вращение задавать - +, Так-же можно было значения выводить на экран, координаты камеры, скорость. А насчёт выноса у меня другие мысли, а если например надо будет отключать класс камеры? а настройки это класса куда заныкать потом. Хотя ещё не знаю можно ли запущенный класс как то отрубить, есть мысли что надо запуск спрятать в функцию которой и управлять, но пока не пробовал.

ООП  -  

Сообщение отредактировал serg-kkz - Четверг, 07.07.2011, 10:34
 
ninthДата: Четверг, 07.07.2011, 13:31 | Сообщение # 4
Admin
Группа: Администраторы
Сообщений: 1554
Награды: 5
Репутация: 46
Статус: Offline
Ты имеешь ввиду убить запущенную задачу?
Code
taskMgr.remove('my_task_name')


Я имел ввиду сделать что-нить типа self.sped self.rot_speed, а в CamControl уже присваивать их
Code
            CofSpeedCam = self.sped # Скорость перемещения камеры
             CofSpeedRot = self.rot_speed # Множитель скорости врашения камеры
              
             md = base.win.getPointer(0)
             x = md.getX()
             y = md.getY()
              
             if (self.keyMap["Lshift"]!=0):
                 CofSpeedCam = self.sped * 5 # если нажата кнопка shift то меняем скорость
 
serg-kkzДата: Четверг, 07.07.2011, 13:45 | Сообщение # 5
Генерал-лейтенант
Группа: Модераторы
Сообщений: 678
Награды: 3
Репутация: 16
Статус: Offline
Неа задачу понятно, как мой класс прекратить выполнять, например переключится на базовою камеру.

Quote (ninth)
Я имел ввиду сделать что-нить типа self.sped self.rot_speed, а в CamControl уже присваивать их

то есть в главном потоке класса их назначать, чтоб из других функций их можно было менять?
но всё равно, ни как не пойму для чего, ведь в модуле нет функций в которых они понадобились бы.

...вроде понял о чём ты, чтоб при обработке не создавать каждый раз переменную со значениями, то есть переменную вынести из цикла функции?
а при обработке менять только значение переменной?


ООП  -  

Сообщение отредактировал serg-kkz - Четверг, 07.07.2011, 14:09
 
serg-kkzДата: Четверг, 07.07.2011, 14:19 | Сообщение # 6
Генерал-лейтенант
Группа: Модераторы
Сообщений: 678
Награды: 3
Репутация: 16
Статус: Offline
Да там у меня ещё много чего лишний раз выполняется. Исправлю.

ООП  -  
 
ninthДата: Четверг, 07.07.2011, 15:36 | Сообщение # 7
Admin
Группа: Администраторы
Сообщений: 1554
Награды: 5
Репутация: 46
Статус: Offline
Вопрос не в том что лишний раз выполняется, а в том, что сейчас ты не сможешь поменять скорость во время исполнения кода.
Убив задачу, ты и так прекратишь обработку этой задачей камеры - т.е. вернёшься к дефолтному управлению - попробуй - увидишь. Если ранее отключал его через base.disableMouse(), то включить можно base.enableMouse()
Впрочем если очень хочется совсем убить экземпляр класса, то надо удалить все ссылки на него, т.е. опять же убить задачу, и убить ссылки обработчика событий, т.к. другие ссылки, насколько я вижу не создаются, после чего сборщик мусора сам снесёт твой класс
 
serg-kkzДата: Суббота, 09.07.2011, 14:29 | Сообщение # 8
Генерал-лейтенант
Группа: Модераторы
Сообщений: 678
Награды: 3
Репутация: 16
Статус: Offline
Обнавил модуль камеры. Думаю можно их обьединить с предыдущими в один модуль, и в один топик поместить, а то в разброс как то получается...

ООП  -  
 
Форум Panda3D - по русски » Panda3D » Примеры кода » Управление камерой, свободная (Камера для обзора уровней.)
Страница 1 из 11
Поиск: