我想创建一个与用户发生冲突的对象列表。但是,我不想使用sprite.collide_rect_ratio()方法,因为它会创建一个对于碰撞而言太大的矩形区域(即,即使它们没有真正触摸,对象似乎也会发生碰撞)。我想使用pygame.sprite.collide_rect_ratio(ratio):来解决问题。如何实现该方法,以便返回用户与之冲突的对象列表?
它将实现相同的代码,除了具有较小的碰撞区域,如下面的代码:
sprite_list = pygame.sprite.spritecollide(myself, all_sprites_list, False)
谢谢。
答案 0 :(得分:0)
这可能对您有用,
您可能想要研究的是“Per Pixel Collision”,它将首先使用对象的边界框(我怀疑collide_rect
函数的作用)。
您需要做的是找到矩形碰撞的位置以及它们彼此之间的距离。然后检查一个精灵是否有任何不透明的像素触及另一个精灵的任何不透明像素...
This Link可能对您有用,它是一个非常完善的C ++框架教程,类似于pygame。
Per Pixel Collision代码位于页面的下半部分,并按照我上面的描述进行操作。 希望这对你有用,因为它会因“隐形碰撞”而无法使用矩形比率。
快速谷歌搜索可以帮助您更多地使用这种类型的碰撞检测。
稍微提升一些示例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
Here is an already written and tested version来自pygame wiki。阅读该页面上的所有内容将为您提供有关像素碰撞的良好知识以及一些可以立即使用的良好示例代码。
道歉,如果这离主题太远,但我觉得这对你非常有用,因为比率(我觉得)不会对碰撞检测有效。
您可能还想在pygame中查看Rectangle documentation。
至于你的问题,循环遍历所有精灵并使用collide_rect_ratio
方法将是使用这种方法获取碰撞精灵列表的唯一方法。