自我毁灭()发射子弹与通电发生碰撞后未移除精灵

2024-04-25 04:51:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在正试着发射子弹,让它们成功地与加电装置相撞。现在,我希望这样做,因为我的bullet类有一个checkCollision函数。我也打过电话项目符号更新在游戏屏幕的更新类中,所以我不确定发生了什么。在

这是我的子弹课程:

class Bullet(Image):

    def __init__(self, screen_size, width, height, filename, color = (255, 0, 0)):

        super().__init__(screen_size, width, height, filename, color = (255, 0, 0))

    def checkCollision(self, powerup):

        return pygame.sprite.collide_mask(self, powerup)

    def removeBullet(self, powerup):
        if self.checkCollision(powerup):
            self.kill()

    def update(self, powerup):
        self.rect.centerx += 3
        self.removeBullet(powerup)

这是我的通电课程

^{pr2}$

这里是我管理一切的地方:

class GameScreen(SceneBase):

    randomNumber = random.randint(0, 2)
    def __init__(self):
        SceneBase.__init__(self)
        self.bg = pygame.image.load("images/asianbackground.jpg")
        self.my_font = pygame.font.SysFont("Arial", 50)

        self.bullets_group = pygame.sprite.Group()
        self.powerup_group = pygame.sprite.Group()
        self.player_paddle = classes.PlayerPaddle(screen_size, 40, 100, SceneBase.player1_character, self.bullets_group)

        self.ai_paddle = classes.AIPaddle(screen_size, 40, 100, SceneBase.characterlist[GameScreen.randomNumber])
        self.pong = classes.Pong(screen_size, 20, 20, "images/pokeball.png")

        self.now1 = pygame.time.get_ticks()



    def ProcessInput(self, events, pressed_keys):
        for event in events:
            self.player_paddle.handle_event(event)

    def Update(self):
        self.player_paddle.update() 
        self.ai_paddle.update(self.pong, self.player_paddle) 
        self.pong.update(self.player_paddle, self.ai_paddle)


        # if someone reaches a score of 2, then exit the game 
        if self.player_paddle.score == 2 or self.ai_paddle.score == 2:
            SceneBase.is_game_over = True 
            self.SwitchToScene(GameOverScreen())

        time_difference1 = pygame.time.get_ticks() - self.now1


        current_time = pygame.time.get_ticks()

        if time_difference1 >= 2000:
            powerup = classes.PowerUp(screen_size, 40, 40, "images/ramen.png")
            powerup.kill_time = current_time + 5000
            self.powerup_group.add(powerup)
            self.now1 = pygame.time.get_ticks()


        current_time = pygame.time.get_ticks()

        for powerup in self.powerup_group:
            for bullet in self.bullets_group:
                bullet.update(powerup)
            if powerup.kill_time <= current_time:
                self.powerup_group.remove(powerup)



    def Render(self, screen):
        screen.blit(self.bg, (0, 0))
        self.bullets_group.draw(screen)
        self.powerup_group.draw(screen)
        self.player_paddle.draw(screen)
        self.ai_paddle.draw(screen)
        self.pong.draw(screen)

        #Make the text for the user 

        player_text = "Player 1" + ":" + str(self.player_paddle.score)
        player_text_image = self.my_font.render(player_text, True, GREEN)
        screen.blit(player_text_image, (screen_size[0] //4, screen_size[1] * 0.8))

        #Make the text for the AI
        ai_text = "Player 2" + ":" + str(self.ai_paddle.score)
        ai_text_image = self.my_font.render(ai_text, True, GREY)
        screen.blit(ai_text_image, (3* screen_size[0] // 4, screen_size[1] * 0.8))

    def SwitchToScene(self, next_scene):
        self.next = next_scene

Tags: textselfsizeiftimedefgroupupdate
1条回答
网友
1楼 · 发布于 2024-04-25 04:51:36

Sprite有他所属组的列表。您必须在bullet中将bullet_group添加到此列表,然后kill()将从组bullet_group中删除bullet

elif event.key == pygame.K_u:
  bullet = Bullet(screen_size, 25, 25, "images/naruto.png", color = (255, 0 , 0))
  bullet.rect.centerx = self.rect.centerx
  bullet.rect.centery = self.rect.centery 

  bullet.add(self.bullet_group) # <  add group to bullet

  self.bullet_group.add(bullet)

这里的子弹应该只存活3秒(3000毫秒)。
参见__init__removeBullet中的self.lifetime

^{pr2}$

相关问题 更多 >