弹跳球获得动力

Bouncing ball gains momentum

本文关键字:      更新时间:2023-09-26

我在循环中运行以下函数。这是一个基本的弹跳球。我的问题是,每次反弹,球的重量都会增加。怎样才能让它每次都弹到相同的高度呢?

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);
  1. 第一个明显的错误是你试图用经过的时间乘以速度…这行不通。你要做的就是在每次迭代中把(dx,dy)的速度加到(x,y)上……所以忘记这个elapsed

  2. 加速度将始终存在…您不需要if(ball)。

  3. 由于调整球。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能量,所以它给了我一个新的速度,即球到达极限时的速度。(如地板或其他任何东西)。

相关文章:
  • 没有找到相关文章