Skip to content
Snippets Groups Projects
DrawingThread.java 1.14 KiB
Newer Older
Jan Kožusznik's avatar
Jan Kožusznik committed
package lab;

import javafx.animation.AnimationTimer;
import javafx.scene.canvas.Canvas;
Jan Kožusznik's avatar
Jan Kožusznik committed
import javafx.scene.canvas.GraphicsContext;
jez04's avatar
jez04 committed
import javafx.scene.paint.Color;
Jan Kožusznik's avatar
Jan Kožusznik committed

public class DrawingThread extends AnimationTimer {

	private final Canvas canvas;
Jan Kožusznik's avatar
Jan Kožusznik committed
	private final GraphicsContext gc;
jez04's avatar
jez04 committed
	private Scene scene;
	private int frameCount = 0;
	private  int fps = 0;
	private long lastTime;
jez04's avatar
jez04 committed
	private long lastSecond = 0;
	public DrawingThread(Canvas canvas) {
		this.canvas = canvas;
		this.gc = canvas.getGraphicsContext2D();
jez04's avatar
jez04 committed
		scene = new Scene(canvas.getWidth(), canvas.getHeight());
jez04's avatar
jez04 committed
		lastTime = System.nanoTime();
Jan Kožusznik's avatar
Jan Kožusznik committed
	}

	/**
	  * Draws objects into the canvas. Put you code here. 
	 */
	@Override
	public void handle(long now) {
jez04's avatar
jez04 committed
		long timeDelta = now - lastTime;
		scene.draw(gc);
		scene.simulate(timeDelta);
		long currentSecond = now / 1_000_000_000;
		if(lastSecond == currentSecond) {
			frameCount ++;
		} else {
			lastSecond = currentSecond;
			fps = frameCount;
			frameCount = 0;
		}
		lastTime = now;
		//print FPS
		gc.setStroke(Color.RED);
		gc.strokeText(Integer.toString(fps), 10, 30);
		gc.strokeText(Double.toString(1_000_000_000d/timeDelta), 10, 50);