java - 当我将操作系统切换到 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”并删除代码。它给了我以下结果:
- 删除第二个 while 循环时,它会在第一个循环中正确循环。这真的很明显。
- 在两个循环中插入“System.out.println”时(如上面的代码所示),我发现它只在第一个循环中打印一次,然后只将第二个循环循环到无穷大。
我自己调试后预测它会卡在第二个while循环中。由于代码在 PC 上运行,我想知道它是否与硬件有关?我被困住了,我需要帮助。我已经调试过了,没有比这更好的结论了。
我很难插入上面的代码,对此感到抱歉!
解决方案
推荐阅读
- azure-devops - Azure DevOps 管道工件显示此错误:“没有可用于 PlatformV2 构建的版本...”
- android - 如何显示动态 ExpandableViews
- dynamics-crm - D365 Dynamics Customer Engagement / CRM V9 - 在修改者字段中填充适当的值
- angular - 条件请求作为序列中的第一个请求
- sql - 参数化过程 不同场景
- excel - 如何将公式(文本)的结果作为另一个更大公式的一部分?
- php - 如何从 WordPress 网站中的 php 重新启动数据库
- php - 表单提交到数据库后,如何使用 SMS API 发送消息?
- spring - 由于缺少 ServletWebServerFactory bean,Spring Boot jar 无法启动 Web 服务器
- pandas - pandas:删除重复行,同时保留虚拟变量值