【问题标题】:How do I delete rect object from screen once player collides with it?一旦玩家与它发生碰撞,如何从屏幕上删除矩形对象?
【发布时间】:2020-07-17 16:13:54
【问题描述】:

in 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

【问题讨论】:

  • 您不能“删除”在 Surface 上绘制的内容。Surface 仅包含按行和列组织的一堆像素。
  • 有什么方法可以删除精灵吗? 如果我将玩家更改为精灵

标签: python pygame


【解决方案1】:

您不能“删除”在 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.Group 中组织的pygame.sprite.Sprite 对象。 pygame.sprite.Sprite.kill 从所有组中删除 Sprite。

【讨论】:

  • 非常感谢!我现在有一个随机生成器,它现在会在玩家与它发生碰撞时改变位置!
  • 现在,当我与敌人发生碰撞时,虽然它改变了 pos(随机)这是完美的,但是当我解除与敌人的碰撞时,敌人会回到原来的位置。有什么解决办法吗?
  • @Caleb 您必须显示更多代码。请注意,评论部分无意提出其他问题,这些问题扩展了原始问题。如果您有新问题和新问题,请Ask a public question 并让所有贡献者有机会帮助您并回答您的问题。
猜你喜欢
  • 2021-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-29
相关资源
最近更新 更多