0

我正在写一个小的生存游戏。一波又一波地来,更多的敌人来了,你的工作是在他们对你做同样的事情之前把它们消灭掉。

我遇到的问题是碰撞检测。我有一个“敌人”课程,我想确保没有一个敌人可以互相穿过。Pygame 的碰撞设施似乎不能满足我的需要。该函数尤其是敌人类中的“no_merge”函数。目前,它是空白的,但我已经尝试了我可以在 pygame 文档中找到的所有不同的碰撞检测变体,但我似乎无法为属于同一组的每个精灵找到任何测试。

我知道为什么我的代码中的 no_merge() 函数不起作用,它会不断检查与自身的碰撞,这将始终保持正确,我似乎无法找到(或思考)正确的方法。

一些额外的信息:这将是大量的精灵,最小的数字约为 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()
4

1 回答 1

0

好吧,如果你为敌人使用精灵,我唯一能想到的就是以某种方式实现pygame.sprite.spritecollide()

如果你的敌人在一个精灵组中,这将检查该组中的任何怨恨是否发生了碰撞

spritecollide(sprite, group, dokill, collided = None)

  • group 是哪一组精灵

  • 如果它们发生碰撞,dokill 返回一个 bool 精灵将从组中移除

  • 和碰撞是你想使用哪种碰撞(collide_rect,collide_rect_ratio,collide_circle,collide_circle_ratio,collide_mask)

你可以在这里阅读更多

于 2013-07-04T10:06:48.180 回答