0

我正在制作一个基本的 2D 游戏,但我遇到了延迟问题。游戏中的角色移动良好,但有时会减速,主要是在靠近敌人时。不过,敌人并没有造成延迟,因为我一次在屏幕上显示了 50 个并且运行良好。我的时间安排几乎与《Killer Game Programming in Java》一书中的时间安排相同,但似乎效果不太好。FPS 似乎也发生了很大变化,这是不应该的,因为它应该总是需要 15 毫秒来完成一个更新-渲染-绘制-睡眠周期,有人可以解释一下吗?

此外,我认为当我的计算机在后台执行操作(防病毒扫描等)时它会滞后更多,尽管我可以在运行其他程序时以大约 550FPS 的速度运行游戏,所以我不认为这是我的计算机。

以下是我如何计时:

        int waitTime = 1000 / 65; //65 being the desired FPS
        while(running){
        if(!loading){
            gameUpdate();
            gameRender();
            gamePaint();

            afterTime = System.nanoTime();
            timeDiff = afterTime - beforeTime;
            sleepTime = waitTime - (timeDiff / 1000000L);

            if(sleepTime > 0){
                try{
                    mainThread.sleep(sleepTime);
                } catch(InterruptedException ie){}
            }
            else{ 
                sleepSkipped++;
                if(sleepSkipped == maxSleepSkipped){
                    Thread.yield();
                    sleepSkipped = 0;
                }
            }

            fpsTime += (System.nanoTime() - beforeTime) / 1000000;
            fps++;
            if(fpsTime > 1000){
                System.out.println("FPS: " + fps);
                fps = 0;
                fpsTime = 0;
            }

            beforeTime = System.nanoTime();
        }
    }
4

2 回答 2

0

正如 arynaq 所说,这是敌人碰撞检测的问题。循环中的每个循环都会使每个敌人调用很多方法,但是我现在已经删除并重新定位了许多方法调用,这完全解决了延迟问题。谢谢你,阿里纳克。

于 2013-04-29T17:12:12.060 回答
0

我认为您的问题类似于 Thread.sleep() 中最近发生的一个 奇怪行为它给出一个负数,使您的循环进入产生线程的线程,在该线程中添加到 skipcount 并在计数足够高时产生。

于 2013-04-29T15:55:02.620 回答