擅长:python、mysql、java
<p>循环在<a href="http://www.pygame.org/docs/ref/event.html#pygame.event.get" rel="nofollow">^{<cd1>}</a>上阻塞。在</p>
<p>你不会安排任何你自己的活动。在</p>
<p>所以,在操作系统有事件(鼠标移动、重画等)给你之前,你什么都不做。在</p>
<hr/>
<p>而且,即使您修复了这个问题,您也会在每个事件中调用<code>movex += x</code>一次。所以,当操作系统向你抛出大量事件时,你的精灵会疯狂地在屏幕上快速移动,但当事件发生得更慢时,它会慢慢地爬行。那几乎不是你想要的。在</p>
<hr/>
<p>解决这两个问题的一个简单方法就是安排自己的活动。例如,使用<a href="http://www.pygame.org/docs/ref/time.html#pygame.time.set_timer" rel="nofollow">^{<cd3>}</a>,您可以确保每隔250毫秒就得到一个事件,并且您只能在这些事件上移动精灵。例如:</p>
<pre><code>timer_event = pygame.USEREVENT + 1
pygame.time.set_timer(timer_event, 250)
while True:
for event in pygame.event.get():
# ...
elif event.type == timer_event:
movex += x
movey += y
</code></pre>
<hr/>
<p>另一种选择是用固定的帧速率设计游戏。在</p>
<p>下面是一个简单的例子:</p>
^{pr2}$
<p>现在你可以每5帧移动一次。在</p>
<p>一个实际的例子必须处理丢失的帧、队列中太多的事件、在<code>wait</code>和{<cd5>}之间进行适当的选择,等等</p>
<p>但在大多数情况下,我会选择带有计时器的事件驱动版本,而不是固定帧速率版本,尤其是如果你已经在这条线上走下去的话。在</p>