gpt4 book ai didi

java - 在一个时间间隔内运行一个 while 循环

转载 作者:行者123 更新时间:2023-12-02 06:20:23 24 4
gpt4 key购买 nike

我正在构建一款非常强调物理的游戏。因此我需要游戏在非常特定的时间间隔内运行。当前代码:

public double period = .02; //this is the run interval in seconds

//main gameLoop
public void gameLoop(){
long startTime;
long sleep;

while(running){
startTime = System.nanoTime();

Graphics2D g = s.getGraphics();
operateEntities(g);
g.dispose();
s.update();
//figure out how long it must sleep to take .02s altogether
sleep = ((int)(period*1000) - (System.nanoTime() - startTime)*100000);
try{
if(sleep > 0){
Thread.sleep(sleep);
}else{
System.err.println("Warning: program runtime exceeded period");
}
}catch(Exception ex){}

gameTime += period;
}
}

这没有按预期工作。目前主线程正在执行,根本没有 hibernate ,并且触发了“警告:程序运行时间超出期限”警告。

之前我使用的是 System.currentTimeMillis(),但它不够准确,所以我改用 System.nanoTime()

增加周期实际上有助于加快程序速度,而减少它会减慢速度。

有没有简单的逻辑faw?我对 System.nanoTime() 的理解是错误的吗?还是有更好的方法来在特定时间间隔运行 operateEntities、dispose 和 update 方法?

编辑:郑重声明,该程序的完成时间不会超过 0.02 秒。已测试

最佳答案

纳秒小于毫秒,因此,要将纳秒转换为毫秒,您必须除以 100000,而不是乘以它;

    //figure out how long it must sleep to take .02s altogether
sleep = ((int)(period*1000) - (System.nanoTime() - startTime)*100000);

应该改为

    //figure out how long it must sleep to take .02s altogether
sleep = ((int)(period*1000) - (System.nanoTime() - startTime)/100000);

您当前的代码试图 hibernate 200 毫秒减去一个大数字,使 hibernate 为负,并为您提供“警告:程序运行时间超出期限”输出

关于java - 在一个时间间隔内运行一个 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11834703/

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