我一直在致力于这个碰撞检测问题,我似乎可以采取三种主要方法:
第一种方法,即使在16x16雪碧块的旧时代,我也会这样做,但似乎没有一种容易的方法来获取Quartz (或OPENGL )中的单个图像像素数据和/或alpha通道。检测包围框的重叠很容易,但是从重叠中创建第三幅图像,然后测试像素是很复杂的,我的直觉是,即使我们能让它工作起来也会很慢。我是不是漏掉了什么整洁的东西?
第二种方法是将我们的精灵分成几个多边形,并测试它们是否重叠。多边形越多,碰撞检测越准确。它的好处是它速度快,而且可以准确。缺点是它使精灵的创作更加复杂。也就是说,我们必须为每个精灵创建多边形。为了加快速度,最好的方法是创建一棵多边形树。
第三种方法我不确定,因为它涉及到购买代码(或者使用开源许可)。我不知道最好的库是什么,或这是否会使生活更容易,或给我们一个问题,将其集成到我们的应用程序。
因此,简而言之,我赞成多边形和树的方法,并希望您在我开始编写大量代码之前对此有一些看法。
诚挚的问候
戴夫
发布于 2010-04-19 08:22:26
考虑把你的妖精聚合一下。为你的精灵保留一个“背景”的多边形表示,并与游戏世界的多边形版本进行碰撞测试。这会产生一些开销和额外的复杂性,但在额外的可能性方面往往是非常有价值的。(动态阴影、光照效果、与精灵图形无关的碰撞检测、更多的碰撞检测方法、多边形相交等)
否则,您将坚持您所描述的基于像素的方法,这也不错。(ORing重叠)您可以自己完成,也可以让OpenGL在帧缓冲区中完成。(我不记得那些电话了,我想它叫z掩蔽(?),.抱歉的。对于小精灵来说,这可能会慢一些。)考虑使用二进制空间分区技术来优化其中的一些:
例如,四叉树允许您快速找到用于碰撞测试的候选精灵。它们适用于基于像素和顶点的方法。或者只使用BSPTrees。
顺便说一句:我认为在碰撞检测方面的像素精度是一个很好的特性,我在跳跃跑中经常使用它。不过,也许不适用于你的游戏。
https://stackoverflow.com/questions/2665952
复制相似问题