要下载代码,请点击以下链接:
背景:
所以我一直在阅读 pygame 教程,因为我是新手,我发现了 Eli Bendersky 的著名教程。我正在经历第一部分,并试图通过使其成为“社交猫”来增加我自己的天赋。猫会四处游荡,如果它们互相接触,它们就会互相吃草并分道扬镳。换句话说,Eli 拥有相同的东西,但具有碰撞检测和新的精灵。我认为这将是一个很好的做法。在过去的几天里,我一直在研究碰撞检测以及不同的人如何做到这一点,但我还没有看到一个适用于我的场景或类似情况的。我开始看到我所在的社区有多小。
目标:
最终,我试图做到这一点,当一只猫撞到另一只猫时,相撞的那只猫会朝一个随机方向飞去,这个方向比它当前的方向少或多 45 度。
问题:
我正在导入 vec2d,我有我的 Cat 类和我的主类。我想主要进行碰撞检测,因为稍后我将创建一个 GameManager 类来监视正在发生的事情。根据 OOP,猫不应该知道彼此。我一直无法让碰撞检测工作。我尝试了几种不同的方法。在这两种方式中,当它们相互接触时,什么都不会发生。我得到的印象是我想做的事情比我想象的要复杂得多。我怎么搞砸了?我觉得好像我在这一方面浪费了足够多的时间。当然,这是学习的过程。想法?
方式一:
mainWindow.fill(_white_)
for cat in cats:
cat.update(timePassed)
cat.blitme()
catsCollided = pg.sprite.spritecollide(cat, catGroup, True)
print pg.sprite.spritecollide(cat, catGroup, False)
for cat in catsCollided:
cat.currentDirection.angle = randint(int(cat.currentDirection.angle - 45), int(cat.currentDirection.angle + 45))
方式二:
mainWindow.fill(_white_)
for cat in cats:
cat.update(timePassed)
cat.blitme()
print pg.sprite.spritecollide(cat, catGroup, False)
tempCatList = list(cats)
for catA in cats:
tempCatList.remove(catA)
for catB in cats:
if catA.rect.colliderect(catB.rect):
cats[cats.index(catA)].currentDirection.angle = randint(int(cat.currentDirection.angle - 45), int(cat.currentDirection.angle + 45))