[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Управление камерой при помощи мыши
epicFailДата: Суббота, 31.03.2012, 03:05 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 2
Награды: 0
Репутация: 0
Статус: Offline
Встала задача: написать управление камерой на подобии этого, но поворот должен осуществляться мышью.
Прочитав примеры кода и часть документации Панды я нашел класс MouseWatcher, который позволяет нам получить текущее положение курсора(например base.mouseWatcherNode.getMouse()). Сразу возникла идея - изменять угол поворота камеры на позицию курсора, а потом ставить курсор в позицию (0, 0). Вопрос можно ли насильно поставить курсор в какую-нибудь позицию? Если нет, то можно ли реализовать управление как нибудь по другому?
 
serg-kkzДата: Суббота, 31.03.2012, 12:15 | Сообщение # 2
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
Quote (epicFail)
Сразу возникла идея - изменять угол поворота камеры на позицию курсора

Как мне кажется, это уже принцип FPS.

Тема: Пример FPS

Вот фрагмент кода (этот я под себя правил):

Code
md = base.win.getPointer(0)
         x = md.getX()
         y = md.getY()
         if base.win.movePointer(0, base.win.getXSize()/2, base.win.getYSize()/2):
             base.camera.setH(base.camera.getH() -  (x - base.win.getXSize()/2)*0.1)
             base.camera.setP(base.camera.getP() - (y - base.win.getYSize()/2)*0.1)


ООП  -  
 
serg-kkzДата: Суббота, 31.03.2012, 12:28 | Сообщение # 3
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
Вот рабочий пример твоей идеи, если я угадал о чем ты говорил.

Code
import direct.directbase.DirectStart
from pandac.PandaModules import *

class Mouse():

     def __init__(self):
      
         base.disableMouse()
         base.camera.setZ(20)

         level = loader.loadModel('environment')
         level.reparentTo(render)
          
         base.accept('mouse1',self.Pick)
          
     def Pick(self):
         md = base.win.getPointer(0)
         x = md.getX()
         y = md.getY()
         if base.win.movePointer(0, base.win.getXSize()/2, base.win.getYSize()/2):
             base.camera.setH(base.camera.getH() -  (x - base.win.getXSize()/2)*0.1)
             base.camera.setP(base.camera.getP() - (y - base.win.getYSize()/2)*0.1)
              
m = Mouse()

run()


ООП  -  
 
epicFailДата: Суббота, 31.03.2012, 12:29 | Сообщение # 4
Рядовой
Группа: Пользователи
Сообщений: 2
Награды: 0
Репутация: 0
Статус: Offline
Код тот, что нужен, спасибо smile

Сообщение отредактировал epicFail - Суббота, 31.03.2012, 12:31
 
  • Страница 1 из 1
  • 1
Поиск: