I am trying to debug a problem reported with our game on OSX 10.9 (Mavericks). I can’t reproduce the problem, this may be because I am using a PC keyboard and not a Mac keyboard. I’ve separated out a minimal code snippet which hopefully is enough to bring out the problem.
All it does is print out when keys are pressed and released in the console. Wondering if anyone would be kind enough to give it a test? Mostly just try pressing some keys like WASD, maybe also try while holding some modifier keys like shift. If the problem shows itself, you should see that a message is displayed when a key is pressed, but not when it is released. In any case if you could post the output from mashing a few keys it would be a great help to me.
Thanks.
from direct.showbase.ShowBase import ShowBase
class Game(ShowBase):
def __init__(self):
ShowBase.__init__(self)
self.keys = {}
button_node = self.buttonThrowers[0].node()
button_node.setButtonDownEvent('buttonDown')
button_node.setButtonUpEvent('buttonUp')
button_node.setKeystrokeEvent('keystroke')
self.accept('buttonDown', self.key_down)
self.accept('buttonUp', self.key_up)
self.accept('keystroke', self.typekey)
def pushkey(self, key, value):
if not key in self.keys:
self.keys[key] = 0
if (not value and not self.keys[key]) or (value and self.keys[key]):
# Key is already recorded as being in that state.
return
self.keys[key] = value
print 'storing %s=%s' % (key, value)
def key_down(self, value):
print '%s pressed' % value
if len(value) > 1 and '-' in value:
value = value.split('-')[1]
self.pushkey(value, 1)
def key_up(self, value):
print '%s released' % value
if len(value) > 1 and '-' in value:
value = value.split('-')[1]
self.pushkey(value, 0)
def typekey(self, key):
pass
Game().run()
Does it require a build with Cocoa support or Carbon support? They use two different input systems. The old 1.8 releases are limited to Carbon.
Fwiw, this is a link to a recent build with Cocoa support: rdb.name/Panda3D-1.9.0.dmg
I was able to produce a similar issue with Panda3D 1.8.1 on OSX 10.9.2 with want-tk set to t in Config.prc (note: I was not able to get any keyboard at all capture with want-tk set to f). The issue I saw was that key press events would fire late, or sporadically, or not at all, and I saw several instances where the key press event was fired but the release event was not.
I upgraded to the 1.9.0 build rdb posted and after I got it running, your code snippet looked a lot better. Here is some output from a run where I smacked a few keys and most of the modifiers:
Known pipe types:
CocoaGraphicsPipe
(all display modules loaded.)
mouse1 pressed
storing mouse1=1
mouse1 released
storing mouse1=0
a pressed
storing a=1
s pressed
storing s=1
d pressed
storing d=1
f pressed
storing f=1
a released
storing a=0
s released
storing s=0
d released
storing d=0
f released
storing f=0
f pressed
storing f=1
a pressed
storing a=1
s pressed
storing s=1
f released
storing f=0
d pressed
storing d=1
a released
storing a=0
f pressed
storing f=1
s released
storing s=0
d released
storing d=0
f released
storing f=0
f pressed
storing f=1
a pressed
storing a=1
s pressed
storing s=1
f released
storing f=0
d pressed
storing d=1
a released
storing a=0
d released
storing d=0
s released
storing s=0
s pressed
storing s=1
d pressed
storing d=1
f pressed
storing f=1
s released
storing s=0
d released
storing d=0
f released
storing f=0
s pressed
storing s=1
f pressed
storing f=1
d pressed
storing d=1
s released
storing s=0
d released
storing d=0
f released
storing f=0
g pressed
storing g=1
g released
storing g=0
control pressed
storing control=1
lcontrol pressed
storing lcontrol=1
control-s pressed
storing s=1
control-d pressed
storing d=1
control-f pressed
storing f=1
s released
storing s=0
control-g pressed
storing g=1
d released
storing d=0
control-s pressed
storing s=1
s released
storing s=0
control-d pressed
storing d=1
g released
storing g=0
f released
storing f=0
d released
storing d=0
control-s pressed
storing s=1
control-g pressed
storing g=1
control-f pressed
storing f=1
s released
storing s=0
control-d pressed
storing d=1
g released
storing g=0
d released
storing d=0
f released
storing f=0
control released
storing control=0
lcontrol released
storing lcontrol=0
alt pressed
storing alt=1
lalt pressed
storing lalt=1
alt-s pressed
storing s=1
alt-d pressed
storing d=1
alt-f pressed
storing f=1
s released
storing s=0
alt-g pressed
storing g=1
d released
storing d=0
alt-s pressed
storing s=1
g released
storing g=0
f released
storing f=0
alt-f pressed
storing f=1
s released
storing s=0
alt-g pressed
storing g=1
alt-d pressed
storing d=1
g released
storing g=0
alt-s pressed
storing s=1
f released
storing f=0
d released
storing d=0
s released
storing s=0
alt released
storing alt=0
lalt released
storing lalt=0
meta pressed
storing meta=1
lmeta pressed
storing lmeta=1
meta-s pressed
storing s=1
meta-d pressed
storing d=1
meta-f pressed
storing f=1
s released
storing s=0
meta-g pressed
storing g=1
d released
storing d=0
meta-s pressed
storing s=1
f released
storing f=0
g released
storing g=0
meta-f pressed
storing f=1
s released
storing s=0
meta-g pressed
storing g=1
meta-d pressed
storing d=1
meta-s pressed
storing s=1
g released
storing g=0
f released
storing f=0
d released
storing d=0
s released
storing s=0
meta released
storing meta=0
lmeta released
storing lmeta=0
shift pressed
storing shift=1
lshift pressed
storing lshift=1
shift-s pressed
storing s=1
shift-d pressed
storing d=1
shift-f pressed
storing f=1
s released
storing s=0
shift-g pressed
storing g=1
d released
storing d=0
f released
storing f=0
shift-s pressed
storing s=1
g released
storing g=0
shift-d pressed
storing d=1
shift-f pressed
storing f=1
shift-g pressed
storing g=1
s released
storing s=0
d released
storing d=0
g released
storing g=0
f released
storing f=0
shift released
storing shift=0
lshift released
storing lshift=0
shift pressed
storing shift=1
lshift pressed
storing lshift=1
control pressed
storing control=1
lcontrol pressed
storing lcontrol=1
shift-control-s pressed
shift-control-d pressed
shift-control-g pressed
shift-control-f pressed
s released
g released
f released
shift-control-s pressed
d released
shift-control-g pressed
shift-control-f pressed
s released
shift-control-d pressed
shift-control-s pressed
g released
f released
d released
s released
shift released
storing shift=0
lshift released
storing lshift=0
control released
storing control=0
lcontrol released
storing lcontrol=0