Управление камерой, свободная
|
|
serg-kkz | Дата: Среда, 06.07.2011, 18:01 | Сообщение # 1 |
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: 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'ом
Сообщение отредактировал serg-kkz - Суббота, 09.07.2011, 17:17 |
|
| |
ninth | Дата: Четверг, 07.07.2011, 00:31 | Сообщение # 2 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Наверно стоило бы настройки скорости вращения, перемещения и ускорения вынести отдельными константами класса и в обработке присваивать уже их.
|
|
| |
serg-kkz | Дата: Четверг, 07.07.2011, 10:19 | Сообщение # 3 |
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
| Не совсем понял про вынос их в основную программу, я правильно тебя понял? В принципе можно и в модуле их менять, например на доп кнопки повесить изменение переменных, скорость - колёсико мышки, скорость вращение задавать - +, Так-же можно было значения выводить на экран, координаты камеры, скорость. А насчёт выноса у меня другие мысли, а если например надо будет отключать класс камеры? а настройки это класса куда заныкать потом. Хотя ещё не знаю можно ли запущенный класс как то отрубить, есть мысли что надо запуск спрятать в функцию которой и управлять, но пока не пробовал.
ООП -
Сообщение отредактировал serg-kkz - Четверг, 07.07.2011, 10:34 |
|
| |
ninth | Дата: Четверг, 07.07.2011, 13:31 | Сообщение # 4 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 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 |
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
| Неа задачу понятно, как мой класс прекратить выполнять, например переключится на базовою камеру.
Quote (ninth) Я имел ввиду сделать что-нить типа self.sped self.rot_speed, а в CamControl уже присваивать их то есть в главном потоке класса их назначать, чтоб из других функций их можно было менять? но всё равно, ни как не пойму для чего, ведь в модуле нет функций в которых они понадобились бы.
...вроде понял о чём ты, чтоб при обработке не создавать каждый раз переменную со значениями, то есть переменную вынести из цикла функции? а при обработке менять только значение переменной?
ООП -
Сообщение отредактировал serg-kkz - Четверг, 07.07.2011, 14:09 |
|
| |
serg-kkz | Дата: Четверг, 07.07.2011, 14:19 | Сообщение # 6 |
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
| Да там у меня ещё много чего лишний раз выполняется. Исправлю.
ООП -
|
|
| |
ninth | Дата: Четверг, 07.07.2011, 15:36 | Сообщение # 7 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Вопрос не в том что лишний раз выполняется, а в том, что сейчас ты не сможешь поменять скорость во время исполнения кода. Убив задачу, ты и так прекратишь обработку этой задачей камеры - т.е. вернёшься к дефолтному управлению - попробуй - увидишь. Если ранее отключал его через base.disableMouse(), то включить можно base.enableMouse() Впрочем если очень хочется совсем убить экземпляр класса, то надо удалить все ссылки на него, т.е. опять же убить задачу, и убить ссылки обработчика событий, т.к. другие ссылки, насколько я вижу не создаются, после чего сборщик мусора сам снесёт твой класс
|
|
| |
serg-kkz | Дата: Суббота, 09.07.2011, 14:29 | Сообщение # 8 |
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
| Обнавил модуль камеры. Думаю можно их обьединить с предыдущими в один модуль, и в один топик поместить, а то в разброс как то получается...
ООП -
|
|
| |