【问题标题】:Pygame - Getting a bullet to fire up the screen on a MOUSEBUTTONDOWN eventPygame - 让子弹在 MOUSEBUTTONDOWN 事件上启动屏幕
【发布时间】:2021-10-22 08:52:32
【问题描述】:

创建一个太空侵略者风格的游戏,使用精灵作为图像的姿势 - 试图让子弹不断向上移动屏幕,直到它检测到它已经通过 y = 0。我有一个可以发射的函数来移动子弹向上,但每个检测到的 MOUSEBUTTONDOWN 事件仅增加 5 个像素。理想情况下,它需要在仅触发一个事件后继续移动到屏幕顶部。

这里是关于子弹类和事件循环的相关代码。

# bullet class

class Bullet(pygame.sprite.Sprite):
    def __init__(self,path):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load(path)
        self.rect = self.image.get_rect()

    def shoot(self,pixels):
        self.rect.y -= pixels

    def track(self):
        bullet.rect.x = player.rect.x + 23

还有事件循环:

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            quit()  
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                player.moveLeft(5)
            if event.key == pygame.K_RIGHT:
                player.moveRight(5)
        if event.type == pygame.MOUSEBUTTONDOWN:
            bullet.shoot(5)
    
    bullet.track()
  
    playerGroup.update()
    gameDisplay.blit(backgroundImg,(0,0))
    playerGroup.draw(gameDisplay)

    bulletGroup.update()
    bulletGroup.draw(gameDisplay)

    pygame.display.update()
    clock.tick(60)

感谢任何回答我问题的人。

【问题讨论】:

    标签: python oop pygame


    【解决方案1】:

    您可以在子弹类中添加一个附加属性shot。它 最初设置为0,并在调用shoot 方法时更新。 然后track方法更新子弹的y位置 相应地。

    class Bullet(pygame.sprite.Sprite):
        def __init__(self,path):
            pygame.sprite.Sprite.__init__(self)
            self.image = pygame.image.load(path)
            self.rect = self.image.get_rect()
            self.shot = 0  #  bullet not shot initially
    
        def shoot(self, pixels):
            self.shot = pixels
    
        def track(self):
            self.rect.y -= self.shot
    

    所以,只要点击按钮,shot 属性就会被修改 子弹会继续移动。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-27
      • 1970-01-01
      • 2013-11-28
      • 1970-01-01
      • 2022-01-05
      • 2015-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多