【发布时间】:2016-07-27 08:42:09
【问题描述】:
我正在使用 JavaFX 在 Java 中复制经典游戏 Pong。我使用 java.util.Timer、java.util.TimerTask 进行游戏循环和 JavaFX 的 Canvas 进行渲染。有没有办法给画布添加双缓冲,这样动画就不会闪烁?或者我应该以不同的方式处理这个问题?下面是代码。我删除了其中一些我认为无关紧要的部分,因为代码大约有 200 行。
Canvas canvas = new Canvas(stageW, stageH);
GraphicsContext gc;
public void start(Stage stage) throws Exception {
Group root = new Group();
gc = canvas.getGraphicsContext2D();
Timer loop = new Timer();
root.getChildren().add(canvas);
loop.schedule(new GameLoop(), 0, 1000 / 60);
stage.setScene(new Scene(root,stageW, stageH));
stage.show();
}
public class GameLoop extends TimerTask {
@Override
public void run() {
draw(gc);
collisionDetect();
ball.move();
}
}
public void draw() {
gc.setFill(Color.BLACK);
gc.fillRect(0, 0, stageW, stageH);
gc.setFill(Color.WHITE);
gc.fillRect(lBat.getX(), lBat.getY(), lBat.getW(), lBat.getH());
gc.fillRect(rBat.getX(), rBat.getY(), rBat.getW(), rBat.getH());
gc.fillRect(ball.getX(), ball.getY(), ball.getW(), ball.getH());
}
【问题讨论】:
标签: java canvas javafx 2d-games double-buffering