我目前正在为 iPhone 开发 Cocos2d 中的涂鸦跳跃风格游戏,并设置了一个包含两个不同层的场景 - 游戏对象(平台、收藏品等)和玩家(角色,由玩家控制)。
我将它们放在单独的层中,因为我想在玩家跳起来时向下滚动整个游戏对象层——给它一种垂直的、涂鸦跳跃风格的感觉。
问题是玩家和平台之间不会发生交叉,因为它们位于不同的层上。
有谁知道如何解决这个问题?有些人提到了 convertToWorldCoords 但我迷失了!
我目前正在为 iPhone 开发 Cocos2d 中的涂鸦跳跃风格游戏,并设置了一个包含两个不同层的场景 - 游戏对象(平台、收藏品等)和玩家(角色,由玩家控制)。
我将它们放在单独的层中,因为我想在玩家跳起来时向下滚动整个游戏对象层——给它一种垂直的、涂鸦跳跃风格的感觉。
问题是玩家和平台之间不会发生交叉,因为它们位于不同的层上。
有谁知道如何解决这个问题?有些人提到了 convertToWorldCoords 但我迷失了!
是的先生,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"
在需要使用此方法的任何地方!