2011-10-03 106 views
0

我在面板內有一個圖像,它以順時針方向移動。現在,我希望它隨機移動,這是我的問題。如何讓圖像隨機移動?

有人可以給我一個想法如何做到這一點?

這是我已經試過:

private int xVelocity = 1; 
private int yVelocity = 1; 
private int x, y; 
private static final int RIGHT_WALL = 400; 
private static final int UP_WALL = 1; 
private static final int DOWN_WALL = 400; 
private static final int LEFT_WALL = 1; 

public void cycle() 
{  

    x += xVelocity; 
    if (x >= RIGHT_WALL) 
    { 
     x = RIGHT_WALL; 
     if (y >= UP_WALL) 
     { 
      y += yVelocity; 
     } 

    } 

    if (y > DOWN_WALL) 
    { 
     y = DOWN_WALL; 
     if (x >= LEFT_WALL) 
     { 
      xVelocity *= -1; 
     } 
    } 


    if (x <= LEFT_WALL) 
    { 

     x = LEFT_WALL; 
     if (y <= DOWN_WALL) 
     { 
      y -= yVelocity; 
     } 

    } 

    if (y < UP_WALL) 
    { 
     y = UP_WALL; 
     if (x <= RIGHT_WALL) 
     { 
      xVelocity *= -1; 
     } 
    } 
} 
+0

隨機方向是什麼意思?順時針與逆時針或某種[隨機遊走](http://en.wikipedia.org/wiki/Random_walk)?什麼時候它應該改變方向,每當它碰到牆壁時,總是會改變方向? – Ishtar

+0

@Ishtar隨機遊走是什麼意思?我只是希望它在執行過程中隨機移動,我早些時候做過順時針方向。現在,我想讓它隨機移動。 – sack

回答

2

呼叫這樣的方法來設置一個隨機的方向:

public void setRandomDirection() { 
    double direction = Math.random()*2.0*Math.PI; 
    double speed = 10.0; 
    xVelocity = (int) (speed*Math.cos(direction)); 
    yVelocity = (int) (speed*Math.sin(direction)); 
} 

只是注意到你的循環方法需要一點修復才能工作。

public void cycle() { 
    x += xVelocity; 
    y += yVelocity; //added 
    if (x >= RIGHT_WALL) { 
    x = RIGHT_WALL; 
    setRandomDirection();//bounce off in a random direction 
    } 
    if (x <= LEFT_WALL) { 
    x = LEFT_WALL; 
    setRandomDirection(); 
    } 
    if (y >= DOWN_WALL) { 
    y = DOWN_WALL; 
    setRandomDirection(); 
    } 
    if (y <= UP_WALL) { 
    y = UP_WALL; 
    setRandomDirection(); 
    } 
} 

(它的工作原理,但是這不是最有效的/優雅的方式來做到這一點)

如果你想要某種「隨機漫步」嘗試這樣的事:

public void cycle() { 
    //move forward 
    x += xVelocity; 
    y += yVelocity; 

    if (Math.random() < 0.1) {//sometimes.. 
    setRandomDirection(); //..change course to a random direction 
    } 
} 

您可以增加0.1(最大值爲1.0),使其移動更不穩定。

+0

+1但是請注意,這將需要進一步的調整,以「反彈牆壁」,因爲OP的代碼似乎意味着。 (話說回來,我不確定OP的代碼是否反映了他們正在努力實現的目標。) –

+0

@AndrewThompson - 對OP想要的東西一無所知(我的評論早些時候並沒有多大幫助:/),所以我認爲通用的「隨機方向」算法可能有助於確定我們正在尋找什麼... – Ishtar

+1

同意。我有一點點信心,因爲我有*任何想法* OP想要達到的目標。 ;) –

2

變化

y -= yVelocity; 

if (y>0) { 
    y = -1*Random.nextInt(3); 
} else { 
    y = Random.nextInt(3); 
} 
+0

仍然不起作用。 – sack

+1

*「仍然不起作用。」*也許它只是累了。晚上休息一下,早上試試。 OTOH它可能是懶惰的,鞭打它,看看是否有幫助。如果這兩種情況都不是這樣,您可以嘗試解釋您期望看到的內容以及您實際看到的內容。順便說一句 - 我想這已經提到過,但爲了更快地提供更好的幫助,請發佈SSCCE。 –