Привет. А что игру будем доделывать?)Добавлено (24.04.2021, 10:39)
---------------------------------------------
Ребят посмотрите мой код. Управление от лица. Учусь ходить пока.
Нужно что бы не проваливался мой глаз сквозь горы.
from direct.showbase.ShowBase import ShowBase
from panda3d.core import CollisionTraverser, CollisionNode, CollisionSphere
from panda3d.core import CollisionHandlerQueue, CollisionRay, CollisionHandlerFloor
from panda3d.core import Filename, AmbientLight, DirectionalLight
from panda3d.core import PandaNode, NodePath, Camera, TextNode
from panda3d.core import PandaNode, NodePath, Camera, TextNode
from panda3d.core import CollideMask
from direct.task import Task
from math import pi, sin, cos
from panda3d.core import CollisionHandlerPusher
# Класс контроллера мыши и клавы
class Controller():
# Конструктор
def __init__(self):
self.cTrav = CollisionTraverser()
self.pusher = CollisionHandlerPusher()
# Значение шага перемещения клавы
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(30)
# Устанавливает текущее значение ориентациии камеры
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', 'w', 's', 'e', 'q']:
# Создаем запись в словаре
self.keys [key]= 0
# Регестрируем событие на нажатие клавиш
base.accept(key, self.setKey, [key, 1])
# Регестрируем событие на отжатие клавиш
base.accept(key+'-up', self.setKey, [key, 0])
# Метод установки состояния клавиш
def setKey(self, key, value):
self.keys [key]= value
# Метод управления положением и ориентации камеры
def controlCamera(self, task):
# Расчитывем управлением и ориентации камерры
move_x = self.key_step * (self.keys['d'] - self.keys['a'])
# Добавьте перемещение камеры вперед, назад, вверх, вниз
move_y = self.key_step * (self.keys['w'] - self.keys['s'])
move_z = self.key_step * (self.keys['e'] - self.keys['q'])
# Смещаем позицию камеры относительно предыдущего положения камеры
base.camera.setPos(base.camera, move_x, move_y, move_z)
fromObject = camera.attachNewNode(CollisionNode('colNode'))
fromObject.node().addSolid(CollisionRay(0, 0, 0, 0, 0, -1))
lifter = CollisionHandlerFloor()
lifter.addCollider(fromObject, camera)
#collisionNode = base.camera.attachNewNode(collisionNode)
# Получаем новое положение курсора мыши
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):
# Расчитайте поворот камеры по горизонтали
self.heading = self.heading - (new_x - self.x_center) * self.mouse_step
# Расчитайте поворот камеры по диагонали
self.pitch = self.pitch - (new_y - self.y_center) * self.mouse_step
# Устанавливаем новую ориентацию камеры
base.camera.setHpr(self.heading, self.pitch, 0)
# Сообщаем о необходимости повторного запуска камеры
return task.again
if __name__ == '__main__':
class MyApp(ShowBase):
def __init__(self):
ShowBase.__init__(self)
# Load the environment model.
self.scene = self.loader.loadModel("models/world")
# Reparent the model to render.
self.scene.reparentTo(self.render)
# Apply scale and position transforms on the model.
self.scene.setScale(0.25, 0.25, 0.25)
#self.scene.setPos(0, 0, -4)
colliderNode = CollisionNode("player")
# Add a collision-sphere centred on (0, 0, 0), and with a radius of 0.3
colliderNode.addSolid(CollisionSphere(0, 0, 0, 0.3))
collider = self.camera.attachNewNode(colliderNode)
#base.pusher.addCollider(collider, self.camera)
# The traverser wants a collider, and a handler
# that responds to that collider's collisions
#base.cTrav.addCollider(collider, self.pusher)
# Создаем контроллер ьыши и клав
self.controller = Controller()
app = MyApp()
app.run()