Cocos2d - 如何检查不同层中对象之间的交集

and*_*dyg 1 objective-c collision-detection linear-algebra cocos2d-iphone

我目前正在开发一款用于iPhone的Cocos2d涂鸦跳跃式游戏,并设置了两个不同层次的场景 - 游戏对象(平台,收藏品等......)和玩家(角色,由玩家控制).

我在单独的图层中有这些,因为我想在玩家跳起时向下滚动整个游戏对象层 - 给它垂直的,涂鸦跳跃式的感觉.

问题是玩家和平台之间的交叉不会发生,因为他们在不同的层上.

有谁知道如何解决这个问题?有人提到convertToWorldCoords,但我迷失了!

Mec*_*han 5

Yessir,convertToWorldCoords!或者,类似的东西 - 基本上你想要了解你的玩家和游戏对象相对于彼此的位置,并且一种方法是将它们全部转换为"世界"坐标.或者,您可以将玩家位置/矩形转换为游戏对象的坐标系.

想通过一些CGRect交叉测试来保持简单吗?扩展CCNode类别:

CCNode + CoordHelpers.h

#import "CCNode.h"

@interface CCNode (CoordHelpers)
- (CGRect) worldBoundingBox;
@end
Run Code Online (Sandbox Code Playgroud)

CCNode + CoordHelpers.m

#import "CCNode+CoordHelpers.h"

@implementation CCNode (CoordHelpers)
-(CGRect)worldBoundingBox {
    CGRect rect = CGRectMake(0, 0, contentSize_.width, contentSize_.height);
    return CGRectApplyAffineTransform(rect, [self nodeToWorldTransform]);
}
@end
Run Code Online (Sandbox Code Playgroud)

然后,对于超级简单的CGRect碰撞测试:

if(CGRectIntersectsRect([playerObj worldBoundingBox], [otherObj worldBoundingBox])    
{/*...do stuff...*/}
Run Code Online (Sandbox Code Playgroud)

确保#import "CCNode+CoordHelpers.h"您需要使用此方法!