拍摄的第一张照片与第二张照片叠加在一起,或者在第二张照片等之后消失

时间:2020-02-13 16:07:10

标签: python class pygame updates bullet

如果我在短短的几秒钟内发射第二枚子弹,我正在尝试解决触发的子弹消失的原因。我想象screen.fill(GRAY)可能是原因,应该在Class Bullet()内部,或者我需要在其他地方使用all_sprites_list.update()

这是我的MWE代码:

import pygame
BLUE = (0, 0, 255)
GREEN = (0, 255, 0)
GRAY = (128,128,128)
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
class Cowboy(pygame.sprite.Sprite):
      def __init__(self):
          super().__init__()

          self.image = pygame.Surface([14,20])
          self.image.fill(BLUE)
          self.rect = self.image.get_rect()
class Bullet(pygame.sprite.Sprite):
      def __init__(self):
          super().__init__()
          self.image = pygame.image.load("bullet.png").convert()
          self.rect = self.image.get_rect()
      def update(self):
         self.rect.y += -3
def main():
    pygame.init()
    size = [SCREEN_WIDTH, SCREEN_HEIGHT]
    screen = pygame.display.set_mode(size, pygame.RESIZABLE) 
    all_sprites_list = pygame.sprite.Group()
    bullet_list = pygame.sprite.Group() 
    enemies_list = pygame.sprite.Group()
    bullet = Bullet()
    enemy = Cowboy()
    enemies_list.add(enemy)
    all_sprites_list.add(enemy)
    enemy.rect.y = 50
    enemy.rect.x = 50
    done = False
    clock = pygame.time.Clock()
    while not done:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                done = True
            elif event.type == pygame.MOUSEBUTTONDOWN:
                bullet_list.add(bullet)
                all_sprites_list.add(bullet)
                bullet.rect.x = 340
                bullet.rect.y = 200
        screen.fill(GRAY)
        all_sprites_list.draw(screen)
        clock.tick(60)
        pygame.display.flip()
    pygame.quit()
if __name__ == "__main__":
    main()

2 个答案:

答案 0 :(得分:1)

import pygame
BLUE = (0, 0, 255)
GREEN = (0, 255, 0)
GRAY = (128,128,128)
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
class Cowboy(pygame.sprite.Sprite):
      def __init__(self):
          super().__init__()

          self.image = pygame.Surface([14,20])
          self.image.fill(BLUE)
          self.rect = self.image.get_rect()
class Bullet(pygame.sprite.Sprite):
      def __init__(self, x, y):
          pygame.sprite.Sprite.__init__(self)
          self.image = pygame.image.load("bullet.png").convert()
          self.rect = self.image.get_rect()
          self.rect.x = x
          self.rect.y = y
      def update(self):
         self.rect.y += -3
def main():
    pygame.init()
    size = [SCREEN_WIDTH, SCREEN_HEIGHT]
    screen = pygame.display.set_mode(size, pygame.RESIZABLE) 
    all_sprites_list = pygame.sprite.Group()
    bullet_list = pygame.sprite.Group() 
    enemies_list = pygame.sprite.Group()
    bullet = Bullet(340, 240)
    enemy = Cowboy()
    enemies_list.add(enemy)
    all_sprites_list.add(enemy)
    enemy.rect.y = 50
    enemy.rect.x = 50
    done = False
    clock = pygame.time.Clock()
    while not done:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                done = True
            elif event.type == pygame.MOUSEBUTTONDOWN:
                bullet = Bullet(340, 200)
                bullet_list.add(bullet)
                all_sprites_list.add(bullet)
                bullet.rect.x = 340
                bullet.rect.y = 200
        screen.fill(GRAY)
        all_sprites_list.update()
        all_sprites_list.draw(screen)
        clock.tick(60)
        pygame.display.flip()
    pygame.quit()
if __name__ == "__main__":
    main()

答案 1 :(得分:1)

按下鼠标按钮时,您必须创建Bullet的新实例,并且必须在{{1}上调用update的项目符号的update方法}:

bullet_list