温馨提示:本文翻译自stackoverflow.com,查看原文请点击:python - First shot fired is superimposed by second shot or simply disappears after second shot and etc
bullet class pygame python updates

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

发布于 2020-05-03 06:33:04

如果我在短短的几秒钟内发射了第二枚子弹,我想解决触发的子弹消失的原因。我想这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()

查看更多

提问者
Diego Bnei Noah
被浏览
38
Rabbid76 2020-02-14 01:00

你必须创建一个新的实例Bullet,当按下鼠标按钮,你必须调用update子弹调用的方法updatebullet_list

def main():
    # [...]

    # bullet = Bullet() <--- DELETE

    # [...]
    while not done:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                done = True
            elif event.type == pygame.MOUSEBUTTONDOWN:

                # create new bullet and add it to the groups
                bullet = Bullet()
                bullet.rect.center = enemy.rect.center
                bullet_list.add(bullet)
                all_sprites_list.add(bullet)

        # update the bullets
        bullet_list.update()

        # [...]