在Cocos2D中改变动态物体为静态物体
原文链接,有压缩和简化 1.导入一个新的头文件 #import "CCPhysics+ObjectiveChipmunk.h"
2.添加一个后处理(post-step)回调 所以你只能在计算完成之后改变CCPhysicsNode的bodyType.你需要添加一个后处理回调,示例如下: - (void)ccPhysicsCollisionPostSolve:(CCPhysicsCollisionPair *)pair penguin:(CCNode *)penguin wildcard:(CCNode *)nodeB
{
if (nodeB == _catapultArm) {
// penguin shall not stick to catapultArm
return;
}
float energy = [pair totalKineticEnergy];
// if energy is large enough,make penguin static
if (_currentPenguin.launched && (energy > 10000.f))
{
[[_physicsNode space] addPostStepBlock:^{
penguin.physicsBody.type = CCPhysicsBodyTypeStatic;
} key:penguin];
}
}
无论何时企鹅被激烈碰撞后都会变成静态物体.真正有趣的代码如下: [[_physicsNode space] addPostStepBlock:^{ penguin.physicsBody.type = CCPhysicsBodyTypeStatic;
} key:penguin];
因为之前新的头文件被导入,所以我们可以访问物理节点的ChipmunkSpace,我们正是在那里添加postStepBlock.该block在Chipmunk完成步骤计算之后调用,我们在block中改变物理对象为static. 其中的key值是用来确保回调只调用一次.这在删除对象的操作中非常重要,但在这个例子中也有意义,因为你不想多次改变节点类型. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |