我正在编写一个小小的生存游戏。一波又一波地挥动着更多的敌人,在他们对你这样做之前将它们割下来是你的工作。
我遇到的问题是碰撞检测。我有一个'敌人'课,我想确保没有敌人可以互相走过。 Pygame的碰撞设施似乎无法满足我的需求。该函数特别是敌人类中的'no_merge'函数。目前,它是空白但我已经尝试了我可以在pygame文档中找到的所有不同的碰撞检测变体,但我似乎无法找到属于同一组的每个精灵的任何测试。
我知道为什么我的代码中的no_merge()函数不起作用,它会不断检查与自身的碰撞,这将永远保持为真,我似乎无法找到(或想到)正确的方法。 / p>
一些额外的信息:它将是大量精灵,其中小数字约为20,最大数字约为100。
这是现在的功能:
def no_merge(self):
"""Makes sure that the enemies cannot walk through each other"""
if pygame.sprite.spritecollide(self,enemy_list,False) and enemy != self:
do collision stuff.
这将插入主循环中,如下所示:
while done == False (this line hasn't indented properly on stack overflow)
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
for bullet in bullet_list:
bullet.rect.x +=4
for enemy in enemy_list:
enemy.chase()
enemy.in_screen
enemy.destroy()
enemy.no_merge()
答案 0 :(得分:0)
如果你为敌人使用精灵,我唯一能想到的就是以某种方式实施pygame.sprite.spritecollide()
如果你的敌人在sprite组中,这将检查该组中的任何一个spites是否发生了碰撞
spritecollide(sprite, group, dokill, collided = None)
该组是哪一组精灵
dokill返回bool如果碰撞精灵将被从组中移除
和碰撞是你想要使用哪种碰撞(collide_rect,collide_rect_ratio,collide_circle, collide_circle_ratio,collide_mask)
您可以阅读更多here