JavaFx停止移动图像污迹画布

时间:2017-01-28 20:02:55

标签: java 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();
        }       
    }};

关于如何阻止这种情况的任何想法?

2 个答案:

答案 0 :(得分:0)

将Canvas视为您正在撰写的一张纸。如果你没有明确地删除任何东西,那么所有你将被吸引到的东西都将是可见的。实际上你应该重新考虑你决定使用Canvas。它不太适合这种动画。

答案 1 :(得分: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()));
    //...
    }
}