- package gameEngine;
-
- public class Time {
- public static long timeStarted = System.nanoTime();
- private static long lastFrameTime = System.nanoTime();
- public static float deltaTime = 0;
-
- private static final long targetFrameTimeNanos = (long) (1E9 / 180); // <- フレームタイム
- private static long lastFpsCheckTime = System.nanoTime();
- private static int frameCount = 0;
- private static float currentFps = 0;
-
- public static float getTime() {
- return (float) ((System.nanoTime() - timeStarted) * 1E-9);
- }
-
- public static void update() {
- long currentTime = System.nanoTime();
- deltaTime = (float) ((currentTime - lastFrameTime) * 1E-9);
- lastFrameTime = currentTime;
-
- // FPSの計算
- frameCount++;
- if (currentTime - lastFpsCheckTime >= 1E9) {
- currentFps = frameCount / ((currentTime - lastFpsCheckTime) * 1E-9f);
- frameCount = 0;
- lastFpsCheckTime = currentTime;
- }
-
- // フレームレート制限
- long elapsedTime = currentTime - lastFrameTime;
- if (elapsedTime < targetFrameTimeNanos) {
- try {
- Thread.sleep((targetFrameTimeNanos - elapsedTime) / 1_000_000);
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- }
- }
- }
-
- public static void reset() {
- timeStarted = System.nanoTime();
- lastFrameTime = timeStarted;
- deltaTime = 0;
- lastFpsCheckTime = timeStarted;
- frameCount = 0;
- currentFps = 0;
- }
-
- public static int getFPS(){
- return (int)currentFps;
- }
- }