pygame:玩家火力延迟

时间:2014-06-04 16:08:50

标签: python pygame

我希望在为我的角色发射子弹之间有一段延迟。我之前在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()

正如您在前面的代码中所看到的,我已经创建了时间,但我不确定这是否是正确的代码顺序方式,以及我还缺少什么。

2 个答案:

答案 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()返回的内容:

  1. 在第一次调用时,它返回自pygame.init()
  2. 以来的时间
  3. 在以后的所有调用中,它会返回从第一次调用到get_ticks的时间(以毫秒为单位)。
  4. 因此,我们存储oldtime并从newtime中减去它以获得时间差异。

答案 1 :(得分:0)

或者,甚至更简单,您可以使用pygame.time.set_timer

在你的循环之前:

    firing_event = pygame.USEREVENT + 1
    pygame.time.set_timer(firing_event, 500)

然后,每500毫秒将一个类型为firing_event的事件发布到队列中。您可以使用此事件来指示何时开火。