gpt4 book ai didi

java - 为什么这个 print 语句会改变这个循环的执行方式?

转载 作者:行者123 更新时间:2023-11-30 07:01:11 24 4
gpt4 key购买 nike

<分区>

这是我的游戏循环线程中的运行方法(另一个 SO 答案的修改版本)。 running boolean 值基本上是作为暂停和取消暂停游戏的一种方式,它正常工作得很好。我试图添加一个构造函数,让游戏以暂停或运行 == false 的形式开始,但它没有用。尽管已成功将运行设置为 true,但游戏永远不会开始。我添加了一些打印语句来弄清楚发生了什么。然后奇怪的事情发生了。添加打印语句解决了这个问题。

private void reset() {
initialTime = System.nanoTime();
deltaU = 0; deltaF = 0;
frames = 0; ticks = 0;
timer = System.currentTimeMillis();
}
public void run() {
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);

reset();
boolean wasRunning=false;
while (true) {
System.out.println("in loop");
if (running) {
System.out.println("running");
if(!wasRunning){
wasRunning=true;
reset();
}
long currentTime = System.nanoTime();
deltaU += (currentTime - initialTime) / timeU;
deltaF += (currentTime - initialTime) / timeF;
initialTime = currentTime;

if (deltaU >= 1) {
update();
ticks++;
deltaU--;
}

if (deltaF >= 1) {
render();
frames++;
deltaF--;
}

if (System.currentTimeMillis() - timer > 1000) { //prints warning if dropped frames
if (printTime) {
System.out.println(String.format("UPS: %s, FPS: %s", ticks, frames));
}
if(ticks!=60 || frames!=60)
System.out.println(String.format("UPS: %s, FPS: %s", ticks, frames));
frames = 0;
ticks = 0;
timer += 1000;
}
}
else
wasRunning=false;
}
}

输出是

in loop
running
in loop
running
in loop
running...

而且游戏运行时有很多卡顿(尽管 fps 警告出奇地安静)。当我注释掉 System.out.println("in loop") 时,没有输出,将 running 设置为 true 也没有任何作用。

所以有一个 print 语句的事实实际上导致循环执行,但是省略它会导致它失败。

请注意,如果 running 一开始设置为 true,打印语句将被删除,暂停和取消暂停功能将按预期工作。

我还尝试将 running 重命名为 running2,以确保它不会覆盖任何内容。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com