【问题标题】:attach multiple collision shapes to a single rigid body将多个碰撞形状附加到单个刚体
【发布时间】:2011-11-18 18:49:59
【问题描述】:
我使用 iOS + Cocos2d + Chipmunk 创建了一个单人游戏,我正在寻找一种解决方案来演示如何将多个碰撞形状附加到单个刚体。我有一个形状不规则的目标(汽车),我需要检测它的碰撞。玩家从侧面看到目标(汽车),其他物体可能从多个方向撞击目标,而不仅仅是从前面或后面。形状是这样的,我无法使用单个 cpPolyShape 并实现逼真的碰撞效果。两个 cpPolyShapes(矩形)堆叠在一起,底部的矩形更大应该可以解决问题。
有人可以举例说明如何实现吗?
我阅读了关于 cpShape 的 Chipmunk 文档http://code.google.com/p/chipmunk-physics/wiki/cpShape,它在注释部分的页面底部声明“您可以将多个碰撞形状附加到刚体”,但没有提供示例。
我目前有一个工作正常的项目,并且正在尝试进行一些最终调整以改善游戏玩法。
【问题讨论】:
标签:
ios
cocos2d-iphone
chipmunk
【解决方案1】:
当您调用 cp*ShapeNew() 时,第一个参数是要附加到的主体。简单地制作多个共享同一个主体的形状。没有诀窍。
【解决方案2】:
可以添加方法
在.h文件中添加原型
static int FunctionName (cpArbiter *arb, cpSpace *space, void *unused);
现在在 .m 文件中添加代码为
cpSpaceAddCollisionHandler(<space name>, <cpCollisionType of body a >, <cpCollisionType of body b>, <cpCollisionBeginFunc name>, <cpCollisionPreSolveFunc preSolve>, <cpCollisionPostSolveFunc postSolve>, <cpCollisionSeparateFunc separate>, <void *data>);
static int FunctionName(cpArbiter *arb, cpSpace *space, void *unused)
{
cpShape *a, *b; cpArbiterGetShapes(arb, &a, &b);
printf("\n Collision Detected");
return 1;
}
注意:- 不要忘记给出两个 Body 的碰撞类型。