我有一个奇怪的问题。如果我每次使用向量在颈背上移动一个身体ENTER_FRAME
(以获得恒定的运动)var vec:Vec2 = new Vec2(40,0);
并将其作为脉冲应用body.applyImpulse(vec);
,当我在同一帧“渲染”场景space.step(1 / this._stage.frameRate);a
时,并在那时以像素为单位追踪运动的差异身体(与其在前一帧的位置相比),它不是每帧恒定的。结果是有时位置在前面,就像它在同一帧中渲染了 2 个脉冲,而下一帧不会有任何脉冲或移动,并且精灵是摇晃的,这是随机发生的。空间没有重力(0,0);
如何让每帧都有冲动的身体保持良好的持续运动?我尝试使用body.position.setxy()
,但它违背了模拟的目的......
我玩了一下space.step(1 / this._stage.frameRate);
并尝试space.step(0.1 / this._stage.frameRate);
了随机晃动消失了,但现在身体在每一帧都有一点点晃动。有什么想法吗 ?
编辑 使用现在速度而不是 applyImpulse,仍然有同样的问题
var old:Number = body.velocity.x;
body.velocity.x = dir.x*speed;
body.velocity.y = dir.y*speed;
trace("DIFF", body.velocity.x-old);
我在每一帧都运行它,身体 x 上的位置差异是:
DIFF 0.19997499999993806
DIFF 0.19997499999993806
DIFF 0.19997499999993806
DIFF 0.19997499999993806
DIFF 0.19997499999993806
DIFF 0.19997499999993806
DIFF 0.19997499999993806
DIFF 0.29992500624990726
DIFF 0.0999999999999659
DIFF 0.19997499999993806
DIFF 0.19997499999993806
因此,每隔一段时间,施加到对象上的速度的结果不是恒定的,因为它偶尔会呈现“领先”并“纠正”自己,如果我可以说的话。