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



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

我将它们放在单独的图层中,因为我想在玩家跳跃时向下滚动整个游戏对象 - 给它垂直的涂鸦跳跃风格的感觉。

问题在于,玩家和平台之间不会发生交集,因为它们位于不同的层上。

有谁知道如何解决这个问题?有些人提到了转换到世界坐标,但我对此感到迷茫!

是的先生,转换到世界坐标!或者,类似的东西 - 基本上你想了解你的玩家和游戏对象彼此之间的关系,一种方法是将它们全部转换为"世界"坐标。或者,您可以将玩家位置/矩形转换为游戏对象的坐标系。

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

CCNode+CoordHelpers.h

#import "CCNode.h"
@interface CCNode (CoordHelpers)
- (CGRect) worldBoundingBox;
@end

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

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

if(CGRectIntersectsRect([playerObj worldBoundingBox], [otherObj worldBoundingBox])    
{/*...do stuff...*/}

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

相关内容

  • 没有找到相关文章