首页 > 解决方案 > 当我将操作系统切换到 Mac 时,我的代码不起作用

问题描述

我不喜欢发布这类问题。但这一次我真的不知道发生了什么。

我在 PC 上编写了这段代码,它运行良好。但是在我的 Macbook 上它不起作用。它似乎卡在了第二个循环中?有没有办法防止这种情况?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();

}

}

有什么问题? 上面的代码应该是游戏循环的“开始”。第一个循环在游戏“正在运行”时运行,而第二个循环在“notProcessedTime”超过 1/60 时运行。为什么?因为我希望那里的代码以 60fps 的速度更新。在 while 循环中,我还从 notProcessedTime 中删除了 UPDATE_TIME,简而言之,这意味着我不希望代码跳过帧。稍后在第二个循环中,我想打印 fps。如果运行正确,应该是 60fps。

在发布之前我尝试了什么?

我尝试在循环中制作一些“System.out.println”并删除代码。它给了我以下结果:

  1. 删除第二个 while 循环时,它会在第一个循环中正确循环。这真的很明显。
  2. 在两个循环中插入“System.out.println”时(如上面的代码所示),我发现它只在第一个循环中打印一次,然后只将第二个循环循环到无穷大。

我自己调试后预测它会卡在第二个while循环中。由于代码在 PC 上运行,我想知道它是否与硬件有关?我被困住了,我需要帮助。我已经调试过了,没有比这更好的结论了。

我很难插入上面的代码,对此感到抱歉!

标签: javawhile-loopgame-loop

解决方案


推荐阅读