Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 循环计数不是预期的_Java_Loops_Graphics - Fatal编程技术网

Java 循环计数不是预期的

Java 循环计数不是预期的,java,loops,graphics,Java,Loops,Graphics,目前正在尝试将游戏循环管理到稳定的60帧。我按照我看到的例子做了一个T,但没有得到预期的输出。我开始怀疑我的电脑是不是太慢了 我使用以下代码来管理每个循环的渲染数量: @Override public void run() { int fps = 60; //Number of renders wanted per second double timePerTick = 1000000000/fps; //Alotted nanoseconds given desir

目前正在尝试将游戏循环管理到稳定的60帧。我按照我看到的例子做了一个T,但没有得到预期的输出。我开始怀疑我的电脑是不是太慢了

我使用以下代码来管理每个循环的渲染数量:

@Override
public void run() {

    int fps = 60;   //Number of renders wanted per second
    double timePerTick = 1000000000/fps;    //Alotted nanoseconds given desired fps
    double delta = 0;
    long now;
    long lastTime = System.nanoTime(); 
    int ticks = 0; //To track the number of times render() is called in 1 second

    while(isRunning) {

        now = System.nanoTime();
        delta += (now - lastTime)/timePerTick; //Delta here is very small #. Represents amount of the timePerTick used after looping through one time.
        timer += now - lastTime;
        lastTime = now;


        if(delta >= 1) {//This dictates whether a render occurs or not.
            render();
            ticks++;
            delta = 0;
        }

        if(timer >= 1000000000) {//Prints out how many renders occurred in one second
            System.out.println("FR at " + ticks);
            ticks = 0;
            timer = 0;

        }

    }
}
在我后面的示例中,这段代码每次打印都会生成60帧。我的一直在打印23、24、17、20等等。无论我如何将
if(delta>=1)
更改为类似
if(delta>=0.0000001)
,它每秒打印的渲染/帧数仍然大致相同

显然,使用较低的阈值,应该进行更多的渲染。。。但事实并非如此。所以在这一点上,我非常困惑。我知道我可以使用
Thread.sleep()
来实现这一点,但不能保证准确无误

我不确定你们是否都想看到我的render()方法,但这里是:

private void render() {
    strategy = myCanvas.getBufferStrategy();

    if(strategy == null) {
        myCanvas.createBufferStrategy(3);
        return;
    }


    do {
        do {

            g = strategy.getDrawGraphics();
            g.clearRect(0, 0, 1000, 1000);

            BufferedImage myImage = ImageLoader.getImage(path);//Do this in an instantiation method


            g.drawImage(myImage.getSubimage(0, 0, 110, 125), x, 0, 300, 300, null);

            strategy.show();
            x++;

        }while(strategy.contentsRestored());

        g.dispose();

    }while(strategy.contentsLost());

}

非常感谢您的帮助

*
buffereImage myImage=ImageLoader.getImage(路径)//在实例化方法中执行此操作。。注意你自己的评论!每次调用循环时尝试加载映像可能是导致速度减慢的原因!一般提示:1)为了更快地获得更好的帮助,请发布一个或。2) 例如,获取图像的一种方法是热链接到中看到的图像。@AndrewThompson谢谢Andrew,我将在以后的问题中对此进行检查:)酷。在这种情况下,我可能会密切关注,并尝试回答未来的问题。当然,你可以在任何时候提出这个问题,然后我可以撤回投票&看看我是否能发现错误。“非常感谢您的帮助!”您已经看到了我在这方面投入的最大努力,除了问题的改进。(不客气,顺便说一句)啊,好主意,哈哈。我会按照你上面的帖子来修复这个笨蛋。