Post by thorgeir on Jan 30, 2009 22:10:07 GMT -5
Ég lagaði aðeins til classann til að navigate'a með lyklaborðinu. Núna virka WASD til að fara áfram og til hliðar og hægri og vinstri örvarna til að snúa sér og upp hoppar.
hérna er kóðinn:
hérna er kóðinn:
from direct.showbase.DirectObject import DirectObject
class KeyNav(DirectObject):
""" An interactive scene """
def __init__(self):
""" The constructor, which builds the scene and sets up user control """
# Code for building the scene could go here...
# Set up movement keys
self.keystate = (0,0,0,0)
self.zVelocity = 0;
key_map = \
(
('s',['pos',(0,-1,0,0)]),('s-up',['pos',(0,1,0,0)]),
('w',['pos',(0,1,0,0)]),('w-up',['pos',(0,-1,0,0)]),
('a',['pos',(-1,0,0,0)]),('a-up',['pos',(1,0,0,0)]),
('d',['pos',(1,0,0,0)]),('d-up',['pos',(-1,0,0,0)]),
('arrow_left',['pos',(0,0,0,1)]),('arrow_left-up',['pos',(0,0,0,-1)]),
('arrow_right',['pos',(0,0,0,-1)]),('arrow_right-up',['pos',(0,0,0,1)]),
('arrow_up',['pos',(0,0,2,0)])
)
for keyCommand in key_map:
self.accept(keyCommand[0], self.set_keystate, keyCommand[1])
self.lasttime = 0
taskMgr.add(self.update_camera, "camerathread") # Start a new thread which then will loop
def set_keystate(self, key, state):
x = self.keystate[0] + state[0]
y = self.keystate[1] + state[1]
z = self.keystate[2] + state[2]
h = self.keystate[3] + state[3]
self.keystate = (x,y,z,h)
def update_camera(self, task):
elapsed = task.time - self.lasttime
x = self.keystate[0]
y = self.keystate[1]
z = self.keystate[2]
h = self.keystate[3]
if((base.camera.getZ() >= 0.5) or (z > 0)):
z = z - 0.1
else:
z = 0
self.keystate = (x,y,z,h)
base.camera.setPos(base.camera,x*elapsed,y*elapsed,z*elapsed)
base.camera.setH(base.camera.getH() + h * elapsed * 50)
self.lasttime = task.time
return task.cont