按比例实现碰撞方法
我想创建一个物体列表,这些物体会和用户发生碰撞。不过,我不想用sprite.collide_rect_ratio()这个方法,因为它创建的碰撞区域太大了,导致物体看起来好像碰撞了,其实它们并没有真正接触。我想用pygame.sprite.collide_rect_ratio(ratio)来解决这个问题。请问我该怎么做,才能让这个方法返回用户碰撞到的物体列表呢?
实现的方法和之前的代码差不多,只是碰撞区域要小一些,像下面的代码:
sprite_list = pygame.sprite.spritecollide(myself, all_sprites_list, False)
谢谢。
1 个回答
0
这可能对你有帮助,
你可以看看“逐像素碰撞”,这个方法首先会使用物体的边界框(我猜这就是collide_rect
函数的作用)。
你需要做的是找出矩形碰撞的位置,以及它们重叠的程度。然后你要检查一个精灵的任何不透明像素是否与另一个精灵的不透明像素相接触……
这个链接可能对你有帮助,它是一个关于类似pygame的C++框架的非常好的教程。
逐像素碰撞的代码在页面中间部分,正如我上面所描述的那样工作。希望这对你有用,因为它避免了由于“看不见的碰撞”而需要使用矩形比例。
快速搜索一下可能会让你对这种碰撞检测有更多了解。
为了给你一些帮助,这里有一些pygame的示例代码:
for s in sprites:
# if no intersection then 'intersection' will be of size 0
intersection = s.Rect.clip(user.rect)
if intersection.width != 0 and intersection.height != 0:
# perform collision detection
这里有一个已经写好并测试过的版本,来自pygame的维基。阅读那一页上的所有内容会让你对像素碰撞有很好的了解,并且提供一些你可以立即使用的示例代码。
如果这偏离主题太远我很抱歉,但我觉得这对你会很有用,因为我认为比例在碰撞检测中表现不佳。
你也可以看看pygame中的矩形文档。
至于你的问题,遍历所有精灵并使用collide_rect_ratio
方法是我所知道的唯一方法,可以用来获取碰撞精灵的列表。