我正在cocos2d为iphone编写射击游戏。我和我想要将碰撞检测排除在我的精灵的alpha之外。 如何读取单个像素的RGBA值。 谢谢你的帮助。
答案 0 :(得分:2)
首先,考虑一下你是否真的想要这样做 - 它比其他碰撞检测方法(即边界框,圆形碰撞)的计算成本更高,这可能不那么准确,但对于大多数用途来说效果很好够了。
如果你真的想要这样做,你应该为你想要检测它们之间的碰撞的每个精灵生成一个掩码。理想情况下,这个掩码应该是精灵的简单1位表示。
接下来,对于要检查碰撞的每个精灵,您需要执行以下几个步骤:
由于像素精确碰撞需要很长时间,因此请先在两个精灵之间进行边界框碰撞,看看是否需要检查像素级碰撞。
如果您知道精灵在边界处发生碰撞,请计算碰撞的矩形。您可能希望在此阶段进行优化,以确定它们是否大于X%重叠它们已发生碰撞。特别是如果精灵的alpha区域位于外边缘。
使用碰撞的矩形区域,浏览每个精灵的面具 - 如果两个像素均为1,则表示发生碰撞 - 退出循环并执行标记它们所需的操作如碰撞。
正如您所看到的,与其他方法相比,这是非常重的CPU,这就是为什么我在开始时建议不要使用它。除非系统具有像素精确碰撞的硬件支持(Atari 2600实际上具有此功能),否则大多数游戏都不会使用像素值进行碰撞。
如果你决定使用边界框方法,你可以做一些事情,比如缩小用于碰撞的边界框,以防止两个精灵在角落处相互接触时的误报。
祝你好运!
答案 1 :(得分:0)
不是特定于Cocos2d,但应该适用于任何iPhone项目 - 请查看this question & answer