我在同一组中有两个不同的精灵,变量名分别为 'player' 和 'ground'。它们都是独立的类,并且具有其表面的遮罩。这行代码在它们两个类中都存在。
self.mask = pygame.mask.from_surface(self.surface)
在他们的表面使用的图像被使用了'convert_alpha()',所以它们的一部分是透明的,并且掩码应该对它们起作用。地面是几个平台,我想检测碰撞,以便让玩家在地面上停留,并在不在非透明部分时使其掉落。
if pygame.sprite.collide_mask(player,ground):
print("collision")
else:
print("nope")
即使玩家精灵在有彩色地面精灵像素的地方跌倒,该行代码仍会输出“没有碰撞”。因此,'collide_mask()'的文档表示当没有碰撞时返回"NoneType"。因此我尝试了这种方法。
if pygame.sprite.collide_mask(player,ground)!= NoneType:
print("collision")
无论玩家在哪里,这都会打印“collision”(我已经设置好了玩家的跳跃、向左和向右移动)。昨天我问了一个有关碰撞的问题,没有得到有用的答案。然后我被告知压缩代码并提交问题,所以希望我解释得足够清楚,而不是发布全部90行代码。我查看了很多其他问题,它们似乎都有点不同,所以我非常困惑(而且我是新手)。 重点在于两个精灵都属于同一组,我无法使spritecollide()起作用,因为这个原因。