| Управление камерой, свободная | 
|  | 
| 
| 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 | Обнавил модуль камеры. Думаю можно их обьединить с предыдущими в один модуль, и в один топик поместить, а то в разброс как то получается... 
 ООП  -
   |  |  |  |  |