java - 系统时间的 Fps 算法错误

标签 java eclipse algorithm frame-rate

我尝试在模拟器中实现 FPS 算法时遇到了一些问题。一般的想法是我希望 60 是每秒最大的滴答渲染周期数。这是我的代码:

public void run() {

    x = 0; //tick is set to 0 originally 
    lastT = System.currentTimeMillis(); //system time in milliseconds

    //tick-render cycle
    while(running == true){

        currentT = System.currentTimeMillis();
        deltaT += currentT - lastT;
        lastT = currentT;

        if(deltaT/tPerTick >= 1){
            tick(); 
            render();
            deltaT = 0; 
        }

    }

    stop(); //stops thread when running =! true
}

常量 'tPerTick' 定义如下

double tPerTick = 1000 / 60

在我开发这个程序的整个过程中,我认为这个算法运行得很好,直到我跟踪这个算法来确认我发现了一个问题。每次循环循环(迭代?我不确定这里的正确词是什么)时,发现 if 语句为真,因此执行 tick-render 循环。我做了一些更多的跟踪(以找出发生这种情况的原因)并发现 deltaT 的值总是远远超过 tPerTick,就像远远超过(在某些情况下是 19 秒,尽管这显然不是这种情况)。我的代码中某处有错误吗?我认为我必须错误地使用 System.currentTimeMillis() 或错误地跟踪算法。

在实际模拟中它似乎工作正常(不知道为什么)。当我绘制图形时,我传递“x”(刻度)并将时间写入屏幕为 x/60 秒。

最佳答案

回答我自己的问题。

System.currentTimeMillis();

获取当前系统时间。如果您在 Debug模式下手动执行算法,“deltaT”将非常大,因为它将等于您手动跟踪算法所花费的时间。

关于java - 系统时间的 Fps 算法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36361414/

相关文章:

java - 如何在 Eclipse 中附加类的实际实现 Java 代码?

java - 如何在 Eclipse 中浏览 Android 类文件(附带源代码)?

algorithm - 什么是最有效的给出素数的算法,最高值(所有 32 位机器都可以处理)

java - 将 3x3 井字游戏转换为 5x5 井字游戏

java - 进程内存使用

java - 无法使用@WebMvcTest Autowiring MockMvc

java - Glassfish 2 在 Glassfish 4 上的应用程序 : "Cannot resolve reference... because there are 2 ejbs in the application"?

php - 如何使用预先存在的源代码为 php 开发设置 eclipse ide

c - 输出模运算

java - 修改Android幻灯片以接受R.drawable中的字符串数组输入?