我目前正在使用pyglet制作游戏,并且具有这样的按键输入设置:
def on_key_release(self, symbol, modifiers):
try:
del self.keys[symbol]
except:
pass
def on_key_press(self, symbol, modifiers):
if symbol == key.ESCAPE: # [ESC]
self.alive = 0
self.keys[symbol] = True
而且我需要能够检测出玩家何时首先按下按键而不是按住按键。例如,我已经尝试过:
def update(self, keys, dt):
if (key.UP in keys) & (key.UP not in self.prev_keys):
jump()
self.prev_keys = keys
但是无论发生什么,它们总是相等的。我无法检测到他们何时首次按下该键。如果您需要有关我要执行的操作或当前如何设置我的代码的更多信息,请询问。谢谢您的帮助!
所以,您的主要问题是可能在这里使用&
而不是and
:
if (key.UP in keys) & (key.UP not in self.prev_keys):
因为bitwise AND (&
)与&
不同。如果一个或多个AND operator (and
)彼此对齐,则and
实际上在位级别上进行比较。这是一个简化的示例:
&
执行1
将导致00000001 # Value 1
00000011 # Value 3
,因为在位级别上,1 & 3
位于相同的“位置”。如以下示例所示:
1
执行1
会导致00000001 # Value 1
00000100 # Value 4
,因为1 & 4
的向下对齐。
您正在尝试通过使用位级比较器来比较两个if语句是否为真0
。哪个行不通。因此,这里的解决方案是:
1
所以代码可能看起来像:
if (...) and (...)