我有一个身体,我在一个按钮的帮助下移动,这就是我正在做的事情:
-(void) step: (ccTime) delta
{
int steps = 2;
CGFloat dt = delta/(CGFloat)steps;
for(int i=0; i<steps; i++){
cpSpaceStep(space, dt);
}
cpSpaceHashEach(space->activeShapes, &eachShape, nil);
cpSpaceHashEach(space->staticShapes, &eachShape, nil);
if(MoveBody)
{
cpFloat movementPadding = 0.1;
cpBodyApplyForce(body,
cpvmult(ccp( 10, 0), movementPadding), cpvzero);
}
else
cpBodyResetForces(body);
}
我只想在条件失败时停止身体移动。我试图用cpBodyResetForces(body)
将所有力重置为0,但这从不起作用 - 它只是继续移动。
如何阻止身体移动?
答案 0 :(得分:1)
如果您阅读了一些基本的物理知识,您会记得只需将所有力重置为零 - 如果没有摩擦 - 身体将继续永远移动。你需要做的是向身体移动的空间添加摩擦力,或者杀死原始力并在对面方向施加力,直到身体停止 - 然后杀死所有力量。
使用物理引擎可能有一种非常有效的方法来做到这一点,但我只是自己学习所有这些 - 希望这有用!
喝彩!
答案 1 :(得分:0)
对象继续前进的原因是它的动力。要让对象停止“自动”,您需要设置大于0的空间阻尼。来自docs:
> cpFloat cpSpaceGetDamping(const cpSpace *space) void
> cpSpaceSetDamping(cpSpace *space, cpFloat value)
应用于空间的简单阻尼量。值0.9意味着每个身体 将失去每秒10%的速度。默认为1.像重力一样 可以按身体覆盖。