我目前正在开发中的cocos2d的iPhone涂鸦跳跃式的游戏,并有现场设置了两个不同的层 - 游戏对象(平台,收藏品等)和播放器(字符,由玩家控制)。
我有这些不同的层,因为我想要滚动整个游戏对象层下当玩家跳起来 - 给它垂直,涂鸦跳跃式的感觉。
问题是球员,因为他们是在不同的层不发生平台之间的交集。
有谁知道这可怎么解决呢? 有些人提到convertToWorldCoords但我与输了!
我目前正在开发中的cocos2d的iPhone涂鸦跳跃式的游戏,并有现场设置了两个不同的层 - 游戏对象(平台,收藏品等)和播放器(字符,由玩家控制)。
我有这些不同的层,因为我想要滚动整个游戏对象层下当玩家跳起来 - 给它垂直,涂鸦跳跃式的感觉。
问题是球员,因为他们是在不同的层不发生平台之间的交集。
有谁知道这可怎么解决呢? 有些人提到convertToWorldCoords但我与输了!
Yessir,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...*/}
确保#import "CCNode+CoordHelpers.h"
无论你需要用这个方法!