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

Objective c Cocos2d-如何检查不同层中对象之间的相交,objective-c,cocos2d-iphone,collision-detection,linear-algebra,Objective C,Cocos2d Iphone,Collision Detection,Linear Algebra,我目前正在为iPhone开发一款Cocos2d中的涂鸦跳跃式游戏,场景设置为两个不同的层——游戏对象(平台、收藏品等)和玩家(角色,由玩家控制) 我把它们分为不同的层,因为当玩家跳起来时,我想向下滚动整个游戏对象层,给它一种垂直的、涂鸦式的跳跃感觉 问题是玩家和平台之间不会发生交集,因为它们位于不同的层上 有人知道如何解决这个问题吗?有些人提到了convertToWorldCoords,但我对此一无所知 是的,转换到世界坐标!或者,类似的东西——基本上你想了解你的玩家和游戏对象彼此之间的位置,一

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

我把它们分为不同的层,因为当玩家跳起来时,我想向下滚动整个游戏对象层,给它一种垂直的、涂鸦式的跳跃感觉

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


有人知道如何解决这个问题吗?有些人提到了convertToWorldCoords,但我对此一无所知

是的,转换到世界坐标!或者,类似的东西——基本上你想了解你的玩家和游戏对象彼此之间的位置,一种方法是把它们都转换成“世界”坐标。或者,您可以将玩家位置/矩形变换为游戏对象的坐标系

想通过一些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...*/}

确保在需要使用此方法的任何位置导入“CCNode+CoordHelpers.h”

是的,转换到世界坐标!或者,类似的东西——基本上你想了解你的玩家和游戏对象彼此之间的位置,一种方法是把它们都转换成“世界”坐标。或者,您可以将玩家位置/矩形变换为游戏对象的坐标系

想通过一些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...*/}

确保在需要使用此方法的任何位置导入“CCNode+CoordHelpers.h”

这改变了我的生活。不再嵌套
ConverToNodeSpace
。这改变了我的生活。不再嵌套
ConverToNodeSpace