使用cocos2d + box2d进行硬币碰撞检测 - 联系人监听器还是自定义?

时间:2013-02-02 00:49:53

标签: objective-c cocos2d-iphone box2d

我正在使用cocos2d与Box2D进行iOS游戏,我想知道如何最好地处理与可收集对象(如硬币)的碰撞。玩家是一个动态的身体,但硬币和其他收藏品(通常)将是静态的身体。在玩家和这些物体之间创建接触式侦听器或者只是在游戏循环中迭代每个硬币(排除掉屏幕外的任何硬币等)并对它们执行圆形碰撞检测会更好吗?

后一种解决方案对我来说似乎是合理的,但我对box2D缺乏经验,并且不确定使用联系人监听器时的优缺点和性能成本是什么,所以我不确定这是否会更好。

2 个答案:

答案 0 :(得分:1)

我会让联系人监听器完成它的工作而不是尝试与Box2D已经在做的事情并行实现冲突检测。

您可以使用bodyDef.userData存储对CCPhysicsSprite对象(或父对象)的周引用,以便您可以在联系人侦听器中访问它。 来自Box2D文件:

  

用户数据是一个无效指针。这为您提供了将应用程序对象链接到实体的钩子。您应该始终如一地为所有正文用户数据使用相同的对象类型。

答案 1 :(得分:0)

您可能希望查看传感器,因为您不希望硬币阻止您进入传感器。