在pygame中发现了一个奇怪的hitbox错误.如果玩家在我的游戏中死亡,命中框会留下来,这会产生一些问题



我通过摆弄pygame所提供的内容找到了sprite.kill()方法。然而,我发现,由于某种原因,如果我使用这种说法,玩家的命中框会留在玩家被杀的地方。这就产生了一些问题,例如,我使用死亡计数器来跟踪玩家的死亡,所以说,如果我死在扣球上,命中率会保持不变,因此死亡计数器会不断增加。我的解决方法是在游戏窗口的角落设置玩家的x和y位置,但我越开发我的游戏,我就意识到这会解决我的问题。

谢谢你的帮助。

这不是一个bug。若您在Group之外的其他地方引用了Sprite对象,则该对象仍然是活动的(当然(,即使您kill也是如此。kill不会破坏该对象,它只是从所有组中删除该对象
这导致对象不会通过pygame.sprite.Group.update()机制进行更新,并且其所有属性保持不变
如果Sprite不是Group的一部分,则必须自己更新对象。没有人会神奇地改变属性,当然"命中框保持不变">

一个解决方案是覆盖kill方法,并重置派生类中的一些属性(如命中框(:

class MySprite(pygame.sprite.Sprite):
def __init__(self):
super().__init__()  
# [...]
def kill(self):
print("kill me")
# reset some attributes
# [...]
# kill the sprite
super().kill()

相关内容

最新更新