Я пытаюсь сделать пулевое движение в Pygame. Извиняюсь, если у него есть простое исправление, я просто не могу думать в данный момент.Пытается переместить спрайт в pygame
Это то, что я запускаю, когда обнаруживаю, что нажата кнопка «1».
if pygame.event.get().type == KEYDOWN and e.key == K_1:
bullet = Bullet()
bullet.rect.x = player.rect.x
bullet.rect.y = player.rect.y
entities.add(bullet)
bullet_list.add(bullet)
bullet.update()
... и это фактический класс пули. Интервал немного выключен.
class Bullet(pygame.sprite.Sprite):
def __init__(self):
super(Bullet, self).__init__()
self.image = pygame.Surface([4, 10])
self.image.fill(pygame.Color(255, 255, 255))
self.isMoving = False
self.rect = self.image.get_rect()
def update(self):
for i in range(20):
self.rect.x += 3
Я понимаю, что метод обновления происходит мгновенно, а не медленнее, чем я хочу. Как я могу заставить пулю двигаться медленнее? Все ответы, которые я видел, связаны с полной остановкой программы, а не просто остановкой одного объекта. Есть ли способ обойти это?
Спасибо! Это исправило это. У меня уже было clock.tick() в программе, но я помещал обновление в нажатие кнопки, как вы сказали, я был. Итак, если я правильно понимаю, просто используйте часы, чтобы делать какие-либо события времени? –
'clock.tick (60)' гарантирует, что цикл выполняется не чаще, чем 60 раз в секунду. Каждый прогон этого цикла называется Frame, дискретным состоянием игры. Вот откуда исходит термин «Фреймы в секунду» (FPS). Они имеют многозадачную архитектуру, так что любое действие не останавливает все остальное. Например, если вы создаете анимацию, вы не можете остановить обновление изображения только потому, что хотите захватить ввод пользователя. См. Https://en.wikipedia.org/wiki/Game_programming#Game_structure для получения дополнительной информации. –