如何施加不应连续的力

时间:2010-04-15 12:39:11

标签: cocos2d-iphone chipmunk

我有一个身体,我在一个按钮的帮助下移动,这就是我正在做的事情:

-(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,但这从不起作用 - 它只是继续移动。

如何阻止身体移动?

2 个答案:

答案 0 :(得分:1)

如果您阅读了一些基本的物理知识,您会记得只需将所有力重置为零 - 如果没有摩擦 - 身体将继续永远移动。你需要做的是向身体移动的空间添加摩擦力,或者杀死原始力并在对面方向施加力,直到身体停止 - 然后杀死所有力量。

使用物理引擎可能有一种非常有效的方法来做到这一点,但我只是自己学习所有这些 - 希望这有用!

喝彩!

答案 1 :(得分:0)

对象继续前进的原因是它的动力。要让对象停止“自动”,您需要设置大于0的空间阻尼。来自docs:

> cpFloat cpSpaceGetDamping(const cpSpace *space) void
> cpSpaceSetDamping(cpSpace *space, cpFloat value) 
  

应用于空间的简单阻尼量。值0.9意味着每个身体   将失去每秒10%的速度。默认为1.像重力一样   可以按身体覆盖。