python - How to make panda3d accept controls faster? -
hi trying make game on panda3d v 1.8.1 (python) controls seem sloppy. 1 has keep keys pressed second or 2 make things happen. there way make panda3d accept controls faster ?
here's code of key handler :
class keyhandler(directobject): def __init__(self): self.accept('arrow_left-repeat', self.lookleft) self.accept('arrow_right-repeat', self.lookright) self.accept('arrow_up-repeat', self.lookup) self.accept('arrow_down-repeat', self.lookdown) self.accept('w-repeat', self.moveforward) self.accept('s-repeat', self.movebackward) self.accept('a-repeat', self.moveleft) self.accept('d-repeat', self.moveright) self.accept('q-repeat', self.movedown) self.accept('e-repeat', self.moveup) self.accept('space', self.dotask) def lookleft(self): global camxy camxy += 2 def lookright(self): global camxy camxy -= 2 def lookup(self): global camyz camyz += 2 def lookdown(self): global camyz camyz -= 2 def moveforward(self): global camx if camx < 57 : camx += 1 def movebackward(self): global camx if camx > -32 : camx -= 1 def moveleft(self): global camy if camy < 42 : camy += 1 def moveright(self): global camy if camy > -36 : camy -= 1 def moveup(self): global camz if camz < 15 : camz += 0.5 def movedown(self): global camz if camz >1 : camz -= 0.5 = keyhandler() def set_cam(task) : camera.setpos(camx,camy,camz) camera.sethpr(camxy,camyz,camzx) taskmgr.add(set_cam, "setcamtask")
the camera using default camera of panda3d.
any appreciated !
you should avoid using "-repeat" handlers. take long trigger more letters take appear if hold key down in textbox.
the usual way use dict
keeping key state:
class keyhandler(directobject): keys = {"lookleft": false, "lookright": false} # etcetera def __init__(self): directobject.__init__(self) self.accept('arrow_left', self.presskey, ["lookleft"]) self.accept('arrow_left-up', self.releasekey, ["lookright"]) taskmgr.add(self.set_cam, "setcamtask") def presskey(self, key): self.keys[key] = true def releasekey(self, key): self.keys[key] = false # method passed bound def set_cam(self, task): dt = globalclock.getdt() if self.keys["lookleft"]: camera.seth(camera.geth() + 2 * dt) elif self.keys["lookright"]: camera.seth(camera.geth() + 2 * dt) = keyhandler()
this allow define user settings keys more easily.
this not first or important issue code though. set_cam
should method of keyhandler
instead of declaring every variable global, , should multiply movement each frame's dt keep game looking same speed different framerates.
Comments
Post a Comment