2017-01-28 49 views
1

我正在試圖製作一個簡單的動畫菜單,圖像在屏幕周圍反彈,但圖像留下的痕跡往往是移動。JavaFx停止移動圖像模糊畫布

public void handle(long now) { 
     // TODO Auto-generated method stub 
     boolean intersectFlag = false; 
     for(Letter l : letters){ 
      gameMenuGraphicsContext.drawImage(l.letterImage, l.letterRectangle.getX(), l.letterRectangle.getY()); 
      l.moveSimple(); 
     }  
    }}; 

有關如何阻止這種情況發生的任何想法?

回答

0

將Canvas視爲您正在寫入的一張紙。如果你沒有明確地清除任何東西,那麼你所看到的所有東西都會顯示出來。其實你應該重新考慮你決定使用Canvas。它不太適合這種動畫。

0

正如mipa所言,您的問題是繪製的圖像從未被擦除。要刪除你的畫布,使用方法:

graphicsContext.clearRect(0, 0, canvas.getWidth(), canvas.getHeight()); 

爲了保持自己從有要在屏幕上繪製每次調用clearRect方法,一個簡單的寫入和忘記的辦法是清算和繪畫結合成一種方法。您甚至可以使用lambda表達式在canvas上繪圖,如下面的代碼所示:

private static void clearAndDraw(GraphicsContext gc, Consumer<GraphicsContext> draw) { 
     gc.clearRect(0, 0, gc.getCanvas().getWidth(), gc.getCanvas().getHeight()); 
     draw.accept(gc); 
    } 

public void handle(long now) { 
    //... 
    for(Letter l : letters) { 
    clearAndDraw(graphicsContext, gc -> gc.drawImage(l.letterImage, l.letterRectangle.getX(), l.letterRectangle.getY())); 
    //... 
    } 
}