试图在pygame

时间:2016-07-08 22:03:14

标签: python pygame sprite

我正试图在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

我知道更新方法会立即发生,而不是我想要的慢速移动。我怎么能让子弹移动得更慢? 我见过的所有答案都涉及完全停止程序,而不是仅停止一个对象。有办法吗?

1 个答案:

答案 0 :(得分:1)

您需要更新每个游戏时刻线上的所有项目符号,而不仅仅是当玩家按下按钮时。

所以,你会想要这样的东西作为你的事件循环:

clock = pygame.time.Clock()
while True:
    clock.tick(60)
    for event in pygame.event.get():
        if event == KEYDOWN and event.key == K_1:
            bullet = Bullet()
            bullet.rect.x = player.rect.x
            bullet.rect.y = player.rect.y
            entities.add(bullet)
            bullet_list.add(bullet)
    for bullet in bullet_list:
        bullet.update()

并修改Bullet类以执行增量移动,如下所示:

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):
       self.rect.x += 3