弹跳球获得动力

时间:2013-05-10 16:15:18

标签: javascript game-physics

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

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 个答案:

答案 0 :(得分:1)

  1. 第一个明显的错误是你试图将速度乘以经过的时间......它不起作用。你要做的是在每次迭代时将速度(dx,dy)添加到你的(x,y)...所以忘记这个已经过去

  2. 加速将始终存在...您不需要 if(ball.y&gt; 0)

  3. 当球触及极限(地板)时,由于调整 ball.y = 0 ,反转速度不够。当球真正触及极限时,你必须考虑球的准确速度。为了做到这一点,你必须在这里使用势能+ kinect能量概念(谷歌如果你想知道方程的细节)。


  4. 基本上这就是你想要的。

    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能量,所以它给了我一个新的快速,即接近极限时球的速度。 (像地板或其他任何东西)。