2012-03-12 60 views
0

我正在製作一個遊戲,在該遊戲中,我必須在n×n個網格上移動小方格,並且它們必須平滑過渡。這是我所做的交換方法,它應該能夠在屏幕上繪製我的過渡,但由於某種原因,它並沒有這樣做。我在一個簡單的項目上嘗試了一個更簡單的代碼版本,來回移動一個Square,它的功能就像一個魅力,所以我不確定爲什麼這不會重新繪製。這只是我的代碼中的一部分,所以如果對我的代碼有任何其他疑問,請去詢問。Java中的repaint()方法在翻譯後不會重新繪製我的Rectangle

在此先感謝。 (:

public void swap(int y, int x) { 
    long time = System.currentTimeMillis(); 
    int counter = 0; 
    swapNum = tiles[y][x]; 
    rect = (Rectangle) rectangles[y][x].clone(); 

    while(counter < rect.height) { 
     if(System.currentTimeMillis() - time > 5) { 
     rect.translate(this.y-y, this.x-x); 
     time = System.currentTimeMillis(); 
     counter++; 
     repaint(); 

     } 

    } 
    swapNum = 0; 
    rect = new Rectangle(); 


    int temporary = tiles[this.y][this.x]; 
    tiles[this.y][this.x] = tiles[y][x]; 
    tiles[y][x] = temporary; 
    this.x = x; 
    this.y = y; 

} 

回答

1

如果代碼塊在所述事件/調度線程,其用於繪製到屏幕上運行,那麼這將從更新塊屏幕

而不是做整個的。動畫在一個循環中,考慮設計一個動畫的更新方法,每15-30毫秒調用一次,並相應地更新矩形的位置。對於平滑圖形來說,更好的方法是繪製到圖像緩衝區,然後得到實際的繪製方法將該緩衝區繪製到屏幕上(雙緩衝)。

Java3D具有內置的動畫ñ,所以它可能值得一看。

相關問題