我希望在为我的角色发射子弹之间有一段延迟。我之前在Java中曾经这样做过:
if (System.currentTimeMillis() - lastFire < 500) {
return;
}
lastFire = System.currentTimeMillis();
bullets.add(...);
但是,我怎样才能以pygame方式执行此操作,以获取sys currentTimeMillis。这就是我的run(游戏循环)方法的样子:
time_passed = 0
while not done:
# Process events (keystrokes, mouse clicks, etc)
done = game.process_events()
# Update object positions check for collisions...
game.update()
# Render the current frame
game.render(screen)
# Pause for the next frame
clock.tick(30)
# time passed since game started
time_passed += clock.get_time()
正如您在前面的代码中所看到的,我已经创建了时间,但我不确定这是否是正确的代码顺序方式,以及我还缺少什么。
答案 0 :(得分:1)
如果game.process_events和game.update按预期工作,您的代码就可以了。
修改强> 使用pygame.time.get_ticks而不是我之前提到的时钟。它使用的是python的时间模块,因此代码中的时钟和时钟意味着不同的时钟。这是更好的方式。
#this should be done only once in your code *anywhere* before while loop starts
newtime=pygame.time.get_ticks()
# when you fire, inside while loop
# should be ideally inside update method
oldtime=newtime
newtime=pygame.time.get_ticks()
if newtime-oldtime<500: #in milliseconds
fire()
让我解释一下pygame.time.get_ticks()返回的内容:
因此,我们存储oldtime并从newtime中减去它以获得时间差异。
答案 1 :(得分:0)
或者,甚至更简单,您可以使用pygame.time.set_timer
在你的循环之前:
firing_event = pygame.USEREVENT + 1
pygame.time.set_timer(firing_event, 500)
然后,每500毫秒将一个类型为firing_event的事件发布到队列中。您可以使用此事件来指示何时开火。