游戏开始时游戏崩溃

时间:2021-03-19 19:18:54

标签: python pygame python-3.8

我正在尝试制作一个宇宙飞船游戏,但是,当我添加允许您发射子弹的部分时,游戏崩溃了,当我运行游戏时立即崩溃。

这是我当前的代码(某些部分省略或替换为--snip--)

class Spaceship(pygame.sprite.Sprite):
    def __init__(self, s, x, y):
        pygame.sprite.Sprite.__init__(self)

        self.screen = s
        self.x, self.y = x, y
        self.image = pygame.image.load("C:/eqodqfe/spaceship.png")
        self.image = pygame.transform.scale(self.image, (175, 175))
        self.rect = self.image.get_rect()
        self.rect.center = (self.x, self.y)

    def update(self):
        self.rect.center = (self.x, self.y)


class Bullet(pygame.sprite.Sprite):
    def __init__(self, s, x, y):
        pygame.sprite.Sprite.__init__(self)

        self.screen = s
        self.x, self.y = x, y
        self.image = pygame.image.load("C:/eqodqfe/bullet.png")
        self.image = pygame.transform.scale(self.image, (100, 100))
        self.rect = self.image.get_rect()
        self.rect.center = (self.x, self.y)

    def update(self):
        self.rect.center = (self.x, self.y)

    def fire(self):
        while self.y <= 490:
            self.y -= 5


spaceship = Spaceship(screen, 400, 400)
bullet = Bullet(screen, 0, 0)

running = True
while running:
    --snip--

    key = pygame.key.get_pressed()
    if key[pygame.K_a]:
        spaceship.x -= 0.5
    elif key[pygame.K_d]:
        spaceship.x += 0.5
    --snip--

    spaceship.update()
    bullet.update()

    screen.fill((255, 255, 255))
    screen.blit(spaceship.image, spaceship.rect)
    screen.blit(bullet.image, bullet.rect)

    bullet.x = spaceship.x
    bullet.y = spaceship.y-20

    if pygame.mouse.get_pressed():
        bullet.fire()

    pygame.display.update()

有人知道出了什么问题吗?

1 个答案:

答案 0 :(得分:2)

你期待什么

<块引用>
while self.y <= 490:
   self.y -= 5

这是一个无限循环。

要制作项目符号,您必须在按下鼠标按钮时创建一个 Bullet 实例。但是,您必须使用 MOSUEBUTTONDOWN 事件。 pygame.mouse.get_pressed() 返回一个布尔值列表,代表所有鼠标按钮的状态(TrueFalse)。只要按钮被按住,按钮的状态就是 TrueMOUSEBUTTONDOWN 事件在您单击鼠标按钮时发生一次,而 MOUSEBUTTONUP 事件在鼠标按钮被释放时发生一次。

kill 中移动一个 update 项目符号。 update 在应用程序循环中不断被调用:

class Bullet(pygame.sprite.Sprite):
    # [...]

    def update(self):
        self.y -= 5
        self.rect.center = (self.x, self.y)
        if self.y < 0:
            self.kill()        

Bullet 发生时创建一个 MOSUEBUTTONDOWN

bullets = pygame.sprite.Group()

running = True
while running:
    # [...]

    for event in pygame.event.get():
       if event.type == pygame.QUIT:
            running = False
       if event.type == MOSUEBUTTONDOWN
           bullet = Bullet(screen, spaceship.x, spaceship.y-20)
           bullets.add(bullet)

    bullets.update()

    # [...]
    
    bullets.draw()
    pygame.display.update()

另见: