[英]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.