弹跳球获得动力
Bouncing ball gains momentum
我在循环中运行以下函数。这是一个基本的弹跳球。我的问题是,每次反弹,球的重量都会增加。怎样才能让它每次都弹到相同的高度呢?
function ballUpdate(elapsed)
{
var timeModifier = elapsed;
ball.x += (ball.dx*timeModifier);
ball.y += (ball.dy*timeModifier);
if(ball.y <= 0)
{
ball.dy *= -1;
ball.y = 0;
}
else if(ball.y > 0)
{
ball.dy += -.5*timeModifier;
}
}
function draw()
{
ball.update();
}
function main(elapsed)
{
keyinput(elapsed);
ballUpdate(elapsed);
}
animLoop(main,draw,15);
-
第一个明显的错误是你试图用经过的时间乘以速度…这行不通。你要做的就是在每次迭代中把(dx,dy)的速度加到(x,y)上……所以忘记这个elapsed
-
加速度将始终存在…您不需要if(ball)。
-
由于调整球。y = 0当球碰到极限(地板)时,倒转速度不够。当球到达极限时,你必须考虑球的准确速度。为了做到这一点,你必须在这里使用势能+ kinect能量概念(如果你想知道方程式的细节,可以谷歌一下)。
基本上这就是你想要的。
function ballUpdate(elapsed)
{
var acceleration = -0.5;
ball.x += ball.dx;
ball.y += ball.dy;
if ( ball.y <= 0 )
{
ball.dy = Math.sqrt( -2 * acceleration * ( ball.y - ball.dy ) + ball.dy * ball.dy );
ball.y = 0;
}
ball.dy += acceleration;
}
复制粘贴。这应该行得通。我在这里所做的是测量球的总能量,作为它达到极限之前的势能加上它达到极限之前的kinect能量。在那之后,我把这些能量全部转换回kinect能量,所以它给了我一个新的速度,即球到达极限时的速度。(如地板或其他任何东西)。
相关文章:
- 没有找到相关文章