panda3d demo,加入了键盘控制
from math import pi, sin, cos
from direct.showbase.ShowBase import ShowBase
from direct.task import Task
from direct.actor.Actor import Actor
from direct.interval.IntervalGlobal import Sequence
from panda3d.core import Point3
class MyApp(ShowBase):
def __init__(self):
ShowBase.__init__(self)
# Disable the camera trackball controls.
self.accept('w', self.spam_w)
self.accept('s', self.spam_s)
self.accept('a', self.spam_a)
self.accept('d', self.spam_d)
self.disableMouse()
# Load the environment model.
self.scene = self.loader.loadModel("models/environment")
# 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(-8, 42, 0)
# Add the spinCameraTask procedure to the task manager.
self.taskMgr.add(self.spinCameraTask, "SpinCameraTask")
self.pandaActor = Actor("models/panda-model",
{"walk": "models/panda-walk4"})
self.pandaActor.setScale(0.005, 0.005, 0.005)
self.pandaActor.reparentTo(self.render)
self.pandaActor1 = Actor("models/panda-model",
{"walk": "models/panda-walk4"})
self.pandaActor1.setScale(0.005, 0.005, 0.005)
self.pandaActor1.reparentTo(self.render)
self.pandaActor.loop("walk")
def spam_a(self):
pos = self.pandaActor.getPos()
x = pos[0]-1
y = pos[1]
z = pos[2]
self.pandaActor.setPos(x,y,z);
def spam_d(self):
pos = self.pandaActor.getPos()
x = pos[0]+1
y = pos[1]
z = pos[2]
self.pandaActor.setPos(x,y,z)
def spam_w(self):
pos = self.pandaActor.getPos()
x = pos[0]
y = pos[1]-1
z = pos[2]
self.pandaActor.setPos(x,y,z)
def spam_s(self):
pos = self.pandaActor.getPos()
x = pos[0]
y = pos[1]+1
z = pos[2]
self.pandaActor.setPos(x,y,z)
# Define a procedure to move the camera.
def spinCameraTask(self, task):
angleDegrees = task.time * 6.0
angleRadians = angleDegrees * (pi / 180.0)
self.camera.setPos(20 * sin(angleRadians), -20 * cos(angleRadians), 3)
self.camera.setHpr(angleDegrees, 0, 0)
return Task.cont
app = MyApp()
app.run()