1
我最近開始用java編程。我來自C#/ XNA背景,我已經有遊戲開發經驗。 但是我在我的java遊戲中遇到問題。我有一個彈跳腳本,它使得遊戲中的「粒子」在與固體表面(如地面)碰撞時發生反彈。 以下是管理彈跳的代碼片段。Java反彈物理學:永無止境的反彈
private final void respondY(Rectangle r)
{
if(!r.intersects(getBounds())) // If not colliding, return
return;
if(Yvel > 0) // If falling...
{
if(r.y < Y + Height) //Another collision test
{
Y = r.y - Height; // Set Y to top of object
Yvel *= -bounce; // Bounce (Here is the problem)
onFloor = true;
}
}
else if(Yvel < 0) // If hit ceiling
{
if(Y < r.y + r.height) // Collision test
{
Y = r.y + r.height; // Set Y to bottom of object
Yvel = 0; // No bouncing here
}
}
}
的問題是,在地板上的物體反彈,因爲它應該,但經過一段時間的物體在那裏我希望它停止跳動時,它得到的是恆定的高度相同的高度不斷反彈之後。
注:
Yvel是一個INT作爲對象
彈跳的垂直速度是控制對象如何「有彈性的」是一個浮子。例如0.5意味着它彈回一半高,因爲它下跌
在此先感謝!請注意,這是我的第一篇文章,所以如果我犯了錯誤,請以建設性的方式指出它們。
感謝您的及時答覆,但是當我嘗試這樣做,但問題仍然存在。 'if(Yvel <0)'線阻止物體彈跳,如果移除物體仍然在同一高度彈跳。將.0001f更改爲像.01f這樣較大的東西可以使常量反彈高度更小,但它仍然存在...也許可以使用Math.round()完成某些操作... – JamesEpicGuru
編輯:我沒有在您的答案中看到您的編輯當我寫最後一條評論時,我正在嘗試檢測一個對象是否反覆彈跳到相同的高度,如果是這樣,則在對象撞擊地面時停止。 – JamesEpicGuru