我试图制作一个简单的动画菜单,图像在屏幕周围反弹,但图像留下了移动的痕迹。
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 :(得分: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()));
//...
}
}