Мой код не работает, когда я переключил ОС на Mac - PullRequest
0 голосов
/ 26 марта 2020

Мне не нравится публиковать подобные проблемы. Но на этот раз я действительно не знаю, что случилось.

Я написал этот код на P C, и он работал нормально. Однако на моем Macbook это не работает. Это застревает во второй л oop это похоже? Есть ли способ предотвратить это? Macbook недостаточно быстр?

Код:

package com.mittspel;

public class Handler implements Runnable {

Thread thread;
boolean running = true;
boolean render = false;
int UPDATE_TIME = 1/60;

Handler() {

    thread = new Thread(this);
    thread.run();
}

public void run() {

    double startTime = System.nanoTime() / Math.pow(10, 9);
    double endTime = 0;
    double passedTime = 0;
    double notProcessedTime = 0;    //So we dont skip frames.
    double frameTime = 0;
    int frames = 0;
    int fps = 0;

    while(running) {
        render = false;
        endTime = System.nanoTime() / Math.pow(10, 9);
        passedTime = endTime - startTime;

        frameTime += passedTime;
        notProcessedTime += passedTime;
        System.out.println("First loop");
        do {
            notProcessedTime -= UPDATE_TIME;
            render = true;
            frames++;
            if(frameTime == 1.0) {
                fps = frames;
                System.out.println(fps);
                frames = 0;
                frameTime = 0;
                fps = 0;

            }

            System.out.println("Second Loop");

        }
        while(notProcessedTime >= UPDATE_TIME);

        if(render) {

            //TODO: Render stuff
        }




    }
}
public void start() {


}

public static void main(String[] args) {
    Handler handler = new Handler();
    handler.start();

}

}

В чем проблема? Приведенный выше код должен быть "началом" «Игре-л oop. Первый l oop запускается, когда игра «запускается», а второй l oop - для случая, когда «notProcessedTime» превышает 1/60. Почему? Потому что я хочу, чтобы код там обновлялся в 60fps. В то время как l oop я также удаляю UPDATE_TIME из notProcessedTime, что означает, что я не хочу, чтобы код пропускал кадры. Позже во второй л oop я хочу напечатать fps. Который должен быть 60fps, если он работает правильно.

Что я пробовал перед публикацией?

Я попытался создать какой-то "System.out.println" в циклах и удалил код. Он дал мне следующие результаты:

  1. При удалении второго, пока l oop, он корректно зацикливается на первом l oop. Что на самом деле очевидно.
  2. Вставляя «System.out.println» в оба цикла (как показано выше), я обнаружил, что он печатает только один раз в первом l oop, затем только повторяет второй бесконечность.

Я сам после отладки предсказываю, что он застревает во втором, пока l oop. Поскольку код работал на P C, мне интересно, имеет ли он какое-то отношение к аппаратному обеспечению? Я застрял и мне нужна помощь. Я отладил его и не могу прийти к какому-либо лучшему выводу, чем этот.

Я пытался вставить код выше, извините за это!

...