[英]Bouncing ball gains momentum
我有以下功能循环运行。 这是一个基本的弹跳球。 我的问题是,每次反弹时,球的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);
第一个明显的错误是您试图将速度乘以经过的时间……这是行不通的。 您要做的是在每次迭代中都将速度(dx,dy)添加到您的(x,y)中...因此,请不要忘记过去了 。
加速度将始终存在...您不需要if(ball.y> 0)
由于调整球。当球触及极限(地板)时, y = 0 ,因此反转速度不够。 当球真正触及极限时,您必须考虑球的确切速度。 为此,您必须在此处使用势能+ kinect能量概念(如果您想知道方程式的细节,请使用Google的概念)。
基本上这就是您想要的。
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能量,因此它给了我一个新的速度,即球触及极限时的速度。 (例如地板或其他任何东西)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.