所以我正在尝试制作一个游戏,在这个游戏中我调用了一个我想慢慢执行的函数,但是当我使用“time.sleep(x)”时,它会暂停文件中的所有内容,而不是仅仅暂停进程功能。我正在尝试为 2-d 游戏添加跳跃功能,所以如果有更好的方法来做到这一点,那么我将不胜感激任何建议,但这只是我对这款游戏的第一个想法。
for n in range(15):
Dino.rect.bottom -= 5
update_screen(Dino, screen, cactus)
time.sleep(0.01)
time.sleep(0.25)
inair = False
for n in range(15):
Dino.rect.bottom += 5
update_screen(Dino, screen, cactus)
time.sleep(0.01)
Run Code Online (Sandbox Code Playgroud)
所以我有了它,所以当我跳跃时,它会给我一个缓慢的跳跃,而不是仅仅传送,但就像我说的,它在跳跃时暂停一切。
这不是计时的好方法。正如你所说,这会使整个程序休眠。多线程对于简单地移动精灵来说有点复杂。
解决这个问题的一个简单方法是使用 PyGame 函数time.get_ticks(),它以毫秒为单位返回不断增加的时间。
使用此时间戳记记录操作的前一次,但在足够的时间过去之前不要再次更新。
例如:
DINO_UPDATE_DELAY = 100 # milliseconds
next_dino_update = 0 # time next move due
[...]
# Move dino, if necessary
time_now = pygame.time.get_ticks()
if ( time_now > next_dino_update ):
Dino.rect.bottom += 5
next_dino_update = time_now + DINO_UPDATE_DELAY # in the future
# Paint the dino, wherever it is
update_screen(Dino, screen, cactus)
Run Code Online (Sandbox Code Playgroud)
将来也可以请求计时器向事件循环发送消息。
MOVE_DINO_EVENT = pygame.USEREVENT + 1
[...]
pygame.time.set_timer( MOVE_DINO_EVENT, DINO_UPDATE_DELAY )
Run Code Online (Sandbox Code Playgroud)
编辑:更深入的解释。
所以基本上你正在实现一个动画,比如动画/卡通。显示器上的东西以某种速度移动。在上面的代码中,您似乎在y + 5每秒0.01(10 毫秒)的方向上移动一个“恐龙” 。
现在,您先绘制恐龙,然后sleep()再移动并再次绘制。当它到达跳跃的最高点时,您等待 250 毫秒,然后重复前一阶段的向下跳跃。
所以使用的问题sleep()是它会阻止整个程序(包括事件循环,这可能会导致不好的事情发生)。
因此,上面的示例没有休眠一段时间,而是简单地查看 PyGame 时钟以确定相同的时间段是否已经过去。这允许程序知道动画是否需要更新。
整个想法是继续查看时钟,使用时间作为下一步绘制内容/位置的仲裁者,而不是多次调用sleep().
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |