0
我在互聯網上找到了一些解釋如何使球彈跳的答案,但其中一些對我沒有幫助(因爲彈跳不是隨機的),有些非常困難(我的物理知識是有限的)。隨機彈跳球
問題:我有一個球移動並彈跳,但不是隨機的,我想讓這個球隨機彈跳。
我已經有這段代碼:
Public Class Ball{
/** Coordinates */
private int x, y;
/** Speed of the ball*/
private int speedX, speedY;
public Ball(int x, int y, int speedX, int speedY) {
this.x = x ;
this.y = y ;
this.speedX = speedX;
this.speedY = speedY;
}
public void moveAndBounce() {
x += speedX ;
y += speedY ;
// Assuming that touchWallHorizontal() and touchWallHorizontal() work
if (touchHorizontalWall()) {
speedX = -speedX ;
}
if (touchVerticalWall()) {
speedY = -speedY ;
}
}
public static void main (String [] args){
Ball ball = new Ball(); // Initialisation
while (true){
ball.moveAndBounce() ;
}
}
}
它完美,但球運動始終是相同的(矩形)。
問題:有沒有辦法讓一個隨機彈跳沒有添加屬性到球(只有座標和速度)?
如果不是,有沒有太難解決這個問題的解決方案?
在此先感謝!
爲什麼不直接設置'speedX' /'speedY'隨機數字,當你需要反彈?但是,只有當你不在乎它的速度有多快時,它纔有用。如果您需要確保速度不變但需要隨機方向,請生成一個隨機角度並從中計算速度。 – jonhopkins
我試着做'setSpeedX((int)Math.random()* 10)'。但球只是消失,不會反彈。我認爲隨機數字無法工作,因爲需要控制新速度以保持在地圖內部。但我會嘗試與角度合作,謝謝你的回答。 –
我應該在第一條評論中提到這個問題。隨機數可以工作。如果當前速度爲正,則使隨機數爲負;如果當前速度爲負值,則使隨機數爲正值。你會遇到與隨機角度相同的問題。另一個問題,取決於你是如何檢查與牆壁的碰撞,是如果速度太高,球就會通過它。您可以嘗試檢查球是否在盒子外面,如果是,請將其移回盒內。 – jonhopkins