首页 > 解决方案 > 一旦玩家与它发生碰撞,如何从屏幕上删除矩形对象?

问题描述

draw()函数中,当玩家 pos = 敌人 pos 但“del”不起作用时,我试图删除 rect 对象。有什么方法可以完全删除敌人的对象?是否有内置的 pygame 函数来删除我不知道的对象?

# draw player
def draw():
    enemy = pygame.draw.rect(screen, enemy_color, (enemy_x, enemy_y, 25, 25))
    player = pygame.draw.rect(screen, player_color, (player_x, player_y, 25, 25))
    
    # if the player is over the enemy then delete the enemy
    if player_x == enemy_x and player_y == enemy_y:
        # this does not work
        del enemy

标签: pythonpygame

解决方案


您不能“删除”在 Surface 上绘制的内容。Surface 仅包含按行和列组织的一堆像素。如果要“删除”矩形,则不能绘制它。
创建pygame.Rect并进行碰撞之前测试。例如:

def draw():

    enemy_rect = pygame.Rect(enemy_x, enemy_y, 25, 25)
    player_rect = pygame.Rect(player_x, player_y, 25, 25)

    if player_rect.colliderect(enemy_rect):
        # create new enemy
        # [...]
    else:
        enemy = pygame.draw.rect(screen, enemy_color, enemy_rect)
    
    player = pygame.draw.rect(screen, player_color, player_rect)

无论如何,我建议使用pygame.sprite.Spritepygame.sprite.Group. pygame.sprite.Sprite.kill从所有组中删除 Sprite。


推荐阅读