首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在iPhone上进行二维碰撞检测的最佳方法是什么?

在iPhone上进行二维碰撞检测的最佳方法是什么?
EN

Stack Overflow用户
提问于 2010-04-19 07:57:29
回答 1查看 1.6K关注 0票数 2

我一直在致力于这个碰撞检测问题,我似乎可以采取三种主要方法:

  1. 雪碧和掩蔽方法。(以及精灵的重叠,并检查产生的精灵像素data).
  2. Bounding圆、矩形或多边形中的非零数)。(创建包含精灵的一个或多个形状,并执行基本数学检查是否重叠)。
  3. 使用现有的雪碧库.

第一种方法,即使在16x16雪碧块的旧时代,我也会这样做,但似乎没有一种容易的方法来获取Quartz (或OPENGL )中的单个图像像素数据和/或alpha通道。检测包围框的重叠很容易,但是从重叠中创建第三幅图像,然后测试像素是很复杂的,我的直觉是,即使我们能让它工作起来也会很慢。我是不是漏掉了什么整洁的东西?

第二种方法是将我们的精灵分成几个多边形,并测试它们是否重叠。多边形越多,碰撞检测越准确。它的好处是它速度快,而且可以准确。缺点是它使精灵的创作更加复杂。也就是说,我们必须为每个精灵创建多边形。为了加快速度,最好的方法是创建一棵多边形树。

第三种方法我不确定,因为它涉及到购买代码(或者使用开源许可)。我不知道最好的库是什么,或这是否会使生活更容易,或给我们一个问题,将其集成到我们的应用程序。

因此,简而言之,我赞成多边形和树的方法,并希望您在我开始编写大量代码之前对此有一些看法。

诚挚的问候

戴夫

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-04-19 08:22:26

考虑把你的妖精聚合一下。为你的精灵保留一个“背景”的多边形表示,并与游戏世界的多边形版本进行碰撞测试。这会产生一些开销和额外的复杂性,但在额外的可能性方面往往是非常有价值的。(动态阴影、光照效果、与精灵图形无关的碰撞检测、更多的碰撞检测方法、多边形相交等)

否则,您将坚持您所描述的基于像素的方法,这也不错。(ORing重叠)您可以自己完成,也可以让OpenGL在帧缓冲区中完成。(我不记得那些电话了,我想它叫z掩蔽(?),.抱歉的。对于小精灵来说,这可能会慢一些。)考虑使用二进制空间分区技术来优化其中的一些:

例如,四叉树允许您快速找到用于碰撞测试的候选精灵。它们适用于基于像素和顶点的方法。或者只使用BSPTrees。

顺便说一句:我认为在碰撞检测方面的像素精度是一个很好的特性,我在跳跃跑中经常使用它。不过,也许不适用于你的游戏。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2665952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档