Cocos2d iphone 如何在box2d中检测动画ccsprite的碰撞

Cocos2d iphone 如何在box2d中检测动画ccsprite的碰撞,cocos2d-iphone,box2d-iphone,box2dweb,Cocos2d Iphone,Box2d Iphone,Box2dweb,我正在制作一个游戏,其中一个角色有一些动画,如跑步、跳跃等 在设置碰撞动画时,是否有方法检测碰撞?因为它在空闲状态、运行和跳跃状态下都在改变形状 在我寻找解决方案的过程中,我发现了这两个 最好的方法是为精灵定义您自己的边界框,并确定一个特定的大小,以与您所在级别的其他形状进行对比测试 否则,您可以使用属性sprite.boundingBox,它将返回实际sprite的CGRect,但我认为这与根据CCNode树的当前转换堆栈有关。它在许多情况下都可以工作,但如果根据动画阶段的大小变化太大,则无法

我正在制作一个游戏,其中一个角色有一些动画,如跑步、跳跃等

在设置碰撞动画时,是否有方法检测碰撞?因为它在空闲状态、运行和跳跃状态下都在改变形状

在我寻找解决方案的过程中,我发现了这两个


最好的方法是为精灵定义您自己的边界框,并确定一个特定的大小,以与您所在级别的其他形状进行对比测试

否则,您可以使用属性
sprite.boundingBox
,它将返回实际sprite的CGRect,但我认为这与根据
CCNode
树的当前转换堆栈有关。它在许多情况下都可以工作,但如果根据动画阶段的大小变化太大,则无法工作

因此,请选择特定的边界框:

CGSize playerBounds = CGSizeMake(20,20);
CGRect bound = CGRectMake(player.position.x, player.position.y, playerBounds.width, playerBounds.height);
// or CGRect bound = player.boundingBox
根据您的级别进行测试:

for (CCSprite *levelPiece in pieces.children) {
  if (CGRectIntersectsRect(bound, levelPiece.boundingBox)) {
    // they're colliding
  }
}

如果我使用边界框,我可以检测任何碰撞。但我想检测box2d形状中的碰撞。我有10帧用于运行动画。每个框架都有不同的形状,腿与身体的角度不同,手与身体的角度不同。我已经为所有帧定义了实体,并相应地进行了更改。但这不是一个有效的想法。因此,我需要一种优化的方法来准确或近似地确定box2d中的碰撞,只需使用一个粗略的碰撞阶段,在该阶段中,您可以测试大的边界框,看看是否存在可能的碰撞,然后使用一个精细的碰撞检测阶段来检查它们,这将更加昂贵,但将使用较少的数据来完成。