code

code

w


from direct.showbase.ShowBase import ShowBase


# Класс контроллера мышки и клавиатуры

class Controller():

  def __init__(self):

    self.key_step = 0.2

    # значение шага поворота мышкой

    self.mouse_step = 0.2

    # координаты центра экрана

    self.x_center = base.win.getXSize()//2

    self.y_center = base.win.getYSize()//2

    # перемещаем указатель мышки в центр экрана

    base.win.movePointer(0, self.x_center, self.y_center)

    # отключаем стандартное управление мышкой

    base.disableMouse()

    # устанавливает поле зрения объектива

    base.camLens.setFov(60)


    # устанавливаем текущие значения ориентации камеры

    self.heading = 0

    self.pitch = 0


    # запускаем задачу контроля камеры

    taskMgr.doMethodLater(0.02, self.controlCamera, "camera-task")

    # регистрируем на нажатие клавиши "Esc"

    # событие закрытия приложения

    base.accept("escape", base.userExit)


    # устанавливаем клавиши управления перемещением камеры

    # словарь, хранящий флаги нажатия клавиш

    self.keys = dict()


    # заполняем словарь

    for key in ['a', 'd']:

      # создаём запись в словаре

      self.keys[key] = 0

      # регистрируем событие на нажатие клавиши

      base.accept(key, self.setKey, [key, 1])

      # регистрируем событие на отжатие клавиши

      base.accept(key+'-up', self.setKey, [key, 0])


    # Добавьте регистрацию клавиш "w", "s", "e", "q"

    # .....


  # Метод установки состояния клавиши

  def setKey(self, key, value):

    self.keys[key] = value


  # Метод управления положением и ориентацией камеры

  def controlCamera(self, task):

    # рассчитываем смещения положения камеры по осям X Y Z

    move_x = self.key_step * (self.keys['d'] - self.keys['a'])

    # Добавьте перемещение камеры вперёд, назад, вверх, вниз

    # .....


    # смещаем позицию камеры относительно предыдущего положения камеры

    base.camera.setPos(base.camera, move_x, 0, 0)


    # получаем новое положение курсора мышки

    new_mouse_pos = base.win.getPointer(0)

    new_x = new_mouse_pos.getX()

    new_y = new_mouse_pos.getY()

    # пробуем установить курсор в центр экрана

    if base.win.movePointer(0, self.x_center, self.y_center):

      # Рассчитайте поворот камеры по горизонтали

      # .....

      # Рассчитайте поворот камеры по диагонали

      # .....

      # устанавливаем новую ориентацию камеры

      base.camera.setHpr(self.heading, self.pitch, 0)


    # сообщаем о необходимости повторного запуска задачи

    return task.again


if __name__ == '__main__':

  # отладка модуля

  class MyApp(ShowBase):


    def __init__(self):

      ShowBase.__init__(self)


      # Загрузка модели

      self.model = loader.loadModel('models/environment')

      # Перемещаем модель в рендер

      self.model.reparentTo(render)

      # Устанавливаем масштаб и позицию для модели

      self.model.setScale(0.1)

      self.model.setPos(-2, 15, -3)


      # создаем контроллер мышки и клавиатуры

      self.controller = Controller()



  app = MyApp()

  app.run()

Report Page