2013-10-17 83 views
0

所以我應該製作一個程序,讓球在一個繪圖板周圍彈跳10秒。如果擊中它們,球必須從面板的兩側反彈。現在,當球擊中底部面板而不是彈起時,它會出現在屏幕中間,並朝相反的方向移動,直到它碰到頂部並消失。基本彈跳球程序,球不會從牆上反彈

我敢肯定,問題是在我這部分代碼... (此前的代碼,我宣佈X 1,Y 250,DX爲1,DY 1)

//Changes dirction 
public static int newDirection1(int x, int dx, int size){ 
    if (x < 0 || x > 500 || (x + size) < 0 || (x + size) > 500) { 
    dx *= -1; 
    return dx; 
    } else { 
    return dx; 
    } 
} 

//Changes direction 
public static int newDirection2(int y, int dy, int size){ 
    if (y < 0 || y > 500 || (y + size) < 0 || (y + size) > 500) { 
    dy *= -1; 
    return dy; 
    } else { 
    return dy; 
    } 
} 

//Moves ball one step 
public static void move(Graphics g, Color color, int size, int x1, int y1, int x2, int y2){ 

    g.setColor(Color.WHITE); 
    g.fillOval(x1, y1, size, size); 
    g.setColor(color); 
    g.fillOval(x2, y2, size, size); 


} 

//Pauses for 10ms 
public static void sleep(int millis, DrawingPanel panel){ 
    panel.sleep(millis); 
} 


public static void bounceLoop(DrawingPanel panel, Graphics g, Color color, int size, int x, int dx, int y, int dy, int millis){ 

    int x1 = x + dx; 
    int x2 = x + dx; 
    int y1 = y + dy; 
    int y2 = y + dy; 

    for (int i = 0; i < 1000; i++) { 

    x1 = x + dx * i; 
    x2 = (x + dx * i) + dx; 
    y1 = y + dy * i; 
    y2 = (y + dy * i) + dy; 
    dx = newDirection1(x2, dx, size); 
    dy = newDirection2(y2, dy, size); 
    move(g, c, size, x1, y1, x2, y2); 
    sleep(millis, panel); 

    } 
    } 

} 
+0

有很多例子(例如問題13022754)(順便說一句,你很好奇你計算dx和dy,然後移動而不刷新新座標的值)。 – AlwaysLearning

回答

1

在循環不使用:

x1 = x + dx * i 

使用

x1 = x1 + dx 

(同爲Y)
,因爲每當dx發生變化,並乘以-1,而不是從原來的位置繼續,並轉到另一個方向,它將從面板的另一側繼續,或者是一個真正關閉的點。

此外還有一些可能會修復編碼的問題:
1-您的getNewDirection不需要dx參數,只需要座標。
2-邊界條件可能會給你一個錯誤,給它一個肉眼無法看到的小偏移量,以避免在創建的面板外創建對象時出現錯誤,或者你正在使用的任何東西

+0

謝謝,球現在從牆上反彈。邊界必須是0和500,但是,只要球碰到牆壁,球就會離開拱門......無論如何要在不改變邊界的情況下襬脫這些邊界? – user2881235

+0

就像我說的,嘗試改變邊界。例如,將它們設置爲4和496可以解決一些錯誤。 儘管我必須看到代碼才能理解爲什麼它會留下足跡 在到達邊界時,它可能與循環有關,它可能會跳過一條通常會移除球的先前位置的某條線。 所以相反,我建議你清除每一次球移動的屏幕。 – ThaBomb