首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹跳球获得动量

弹跳球获得动量
EN

Stack Overflow用户
提问于 2013-05-11 00:15:18
回答 1查看 203关注 0票数 2

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

代码语言:javascript
复制
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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-13 16:21:33

  1. 第一个明显的错误是,你试图将速度乘以已用时间……它不起作用。你需要做的是在每次迭代中将速度(dx,dy)加到你的(x,y)上……所以忘记这个elapsed.
  2. The加速将会一直存在…如果(.y> 0)
  3. Because of = 0 )当球碰到极限(地板)时,倒转速度是不够的,你就不需要了。当球真正触及极限时,你必须考虑球的确切速度。为了做到这一点,你必须在这里使用势能+ kinect能量的概念(如果你想知道方程的细节,可以在谷歌上搜索)。

基本上这就是你想要的。

代码语言:javascript
复制
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能量,所以它给了我一个新的速度,当球达到极限时,它就是球的速度。(像地板或其他任何东西)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16486547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档