回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我正在开发一个简单的游戏。。。一艘飞来飞去射击的火箭飞船。</em></p>
<hr/>
<p><strong>问题:</strong>为什么pygame会停止发出键盘事件,而同时按下按键的次数也会增加?在</p>
<p><strong>关于密钥处理:</strong>程序有很多变量,比如<code>KEYSTATE_FIRE, KEYSTATE_TURNLEFT</code>,等等。。。在</p>
<ol>
<li>处理<code>KEYDOWN</code>事件时,它将相应的<code>KEYSTATE_*</code>变量设置为True。</li>
<li>当处理<code>KEYUP</code>事件时,它将相同的变量设置为False。</li>
</ol>
<p><strong>问题:</strong>
如果<code>UP-ARROW</code>和{<cd6>}同时被按下,则当按下<code>SPACE</code>时,pygame不会发出<code>KEYDOWN</code>事件。此行为因关键点而异。当按下字母时,我似乎可以在pygame停止为其他键发出<code>KEYDOWN</code>事件之前保存大约5个字母。在</p>
<p><strong>验证:</strong>在我的主循环中,我只是打印接收到的每个事件来验证上述行为。在</p>
<p><strong>代码:</strong>作为参考,以下是此时处理关键事件的(粗略)方法:</p>
<pre><code>while GAME_RUNNING:
FRAME_NUMBER += 1
CLOCK.tick(FRAME_PER_SECOND)
#----------------------------------------------------------------------
# Check for events
for event in pygame.event.get():
print event
if event.type == pygame.QUIT:
raise SystemExit()
elif event.type == pygame.KEYDOWN and event.dict['key'] == pygame.K_UP:
KEYSTATE_FORWARD = True
elif event.type == pygame.KEYUP and event.dict['key'] == pygame.K_UP:
KEYSTATE_FORWARD = False
elif event.type == pygame.KEYDOWN and event.dict['key'] == pygame.K_DOWN:
KEYSTATE_BACKWARD = True
elif event.type == pygame.KEYUP and event.dict['key'] == pygame.K_DOWN:
KEYSTATE_BACKWARD = False
elif event.type == pygame.KEYDOWN and event.dict['key'] == pygame.K_LEFT:
KEYSTATE_TURNLEFT = True
elif event.type == pygame.KEYUP and event.dict['key'] == pygame.K_LEFT:
KEYSTATE_TURNLEFT = False
elif event.type == pygame.KEYDOWN and event.dict['key'] == pygame.K_RIGHT:
KEYSTATE_TURNRIGHT = True
elif event.type == pygame.KEYUP and event.dict['key'] == pygame.K_RIGHT:
KEYSTATE_TURNRIGHT = False
elif event.type == pygame.KEYDOWN and event.dict['key'] == pygame.K_SPACE:
KEYSTATE_FIRE = True
elif event.type == pygame.KEYUP and event.dict['key'] == pygame.K_SPACE:
KEYSTATE_FIRE = False
# remainder of game loop here...
</code></pre>
<p><strong>按此顺序:</strong></p>
<ul>
<li><code>a (down)</code></li>
<li><code>s (down)</code></li>
<li><code>d (down)</code></li>
<li><code>f (down)</code></li>
<li><code>g (down)</code></li>
<li><code>h (down)</code></li>
<li><code>j (down)</code></li>
<li><code>k (down)</code></li>
<li><code>a (up)</code></li>
<li><code>s (up)</code></li>
<li><code>d (up)</code></li>
<li><code>f (up)</code></li>
<li><code>g (up)</code></li>
<li><code>h (up)</code></li>
<li><code>j (up)</code></li>
<li><code>k (up)</code></li>
</ul>
<p><strong>以下是输出:</strong></p>
<ul>
<li><code><Event(2-KeyDown {'scancode': 30, 'key': 97, 'unicode': u'a', 'mod': 0})></code></li>
<li><code><Event(2-KeyDown {'scancode': 31, 'key': 115, 'unicode': u's', 'mod': 0})></code></li>
<li><code><Event(2-KeyDown {'scancode': 32, 'key': 100, 'unicode': u'd', 'mod': 0})></code></li>
<li><code><Event(2-KeyDown {'scancode': 33, 'key': 102, 'unicode': u'f', 'mod': 0})></code></li>
<li><code><Event(3-KeyUp {'scancode': 30, 'key': 97, 'mod': 0})></code></li>
<li><code><Event(3-KeyUp {'scancode': 31, 'key': 115, 'mod': 0})></code></li>
<li><code><Event(3-KeyUp {'scancode': 32, 'key': 100, 'mod': 0})></code></li>
<li><code><Event(3-KeyUp {'scancode': 33, 'key': 102, 'mod': 0})></code></li>
<li><code><Event(2-KeyDown {'scancode': 36, 'key': 106, 'unicode': u'j', 'mod': 0})></code></li>
<li><code><Event(2-KeyDown {'scancode': 37, 'key': 107, 'unicode': u'k', 'mod': 0})></code></li>
<li><code><Event(3-KeyUp {'scancode': 36, 'key': 106, 'mod': 0})></code></li>
<li><code><Event(3-KeyUp {'scancode': 37, 'key': 107, 'mod': 0})></code></li>
</ul>
<hr/>
<p>这是常见问题吗?有解决办法吗?如果没有,在使用pygame时,处理多个密钥控制问题的最佳方法是什么?在</p>