我在 Cocos2D 中检测碰撞时遇到问题,因为我用来查看对象是否发生碰撞的坐标总是错误的。
我有以下对象:
- 来自平铺 map 图层的所有 Sprite ,包含所有障碍物;
- 一个 sprite 是另一个 sprite 的子级,另一个 sprite 是 hello world 层(我正在使用的主层,它返回场景)的子级。这个 Sprite 在 map 中不断移动,它可能会与障碍物发生碰撞。
为了检测碰撞,我只看一下 2 个 Sprite 边界框之间的距离:
inline BOOL collision(CGRect r1, CGRect r2)
{
CGPoint c1= RectCenter(r1);
CGPoint c2= RectCenter(r2);
BOOL result= (fabs(c1.x-c2.x)<MAX(r1.size.width/2.0,r2.size.width/2.0)) && (fabs(c1.y-c2.y)<MAX(r1.size.height/2.0,r2.size.height/2.0));
return result;
}
我使用 boundingBox 属性来获取每个 Sprite 的坐标和大小。但是坐标是错误的,它不能正确检测到碰撞。
我很确定我做错了什么,有人可以告诉我如何管理所有 Sprite 以具有相同的坐标系吗?我也尝试过使用 convertToWordSpace,但没有成功。
最佳答案
您可以取消碰撞方法,转而使用内置函数来查看两个 CGRect 是否相交:
CGRectIntersectsRect(r1, r2);
关于iphone - Cocos2D中的坐标系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15102669/