Я хочу иметь задержку между стрельбой для моего персонажа. Раньше я делал это раньше в Java, например:
if (System.currentTimeMillis() - lastFire < 500) {
return;
}
lastFire = System.currentTimeMillis();
bullets.add(...);
Однако, как я могу сделать это в pygame, чтобы получить этот sys currentTimeMillis. Вот как выглядит мой метод run (game loop):
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()
Как вы можете видеть в предыдущем коде, я создал время, но я не уверен, что это правильный способ кодирования и что еще не хватает.
Ваш код в порядке, если game.process_events и game.update работают так, как ожидалось.
Edit: Используйте 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():
Итак, мы сохраняем старое время и выписываем его из нового времени, чтобы получить разницу времени.
Или, еще проще, вы можете использовать pygame.time.set_timer
Перед вашей петлей:
firing_event = pygame.USEREVENT + 1
pygame.time.set_timer(firing_event, 500)
Затем событие типа firing_event будет помещено в очередь каждые 500 миллисекунд. Вы можете использовать это событие, чтобы сигнализировать о том, когда стрелять.
__init__
- хороший выбор.