编程语言
首页 > 编程语言> > Java主游戏循环

Java主游戏循环

作者:互联网

我正在写一个游戏循环,我在here下面的示例中找到了代码.我还看了其他方法来进行游戏循环,例如从this article开始.我无法获得任何那些工作.所以我保留了第一个链接中的那个.

我想知道的是:

>我编写游戏循环的方式是一种很好的方法吗?

>有什么建议吗?

>我应该使用Thread.sleep();在我的游戏循环中?

这是我目前的代码:

public void run(){
    long lastLoopTime = System.nanoTime();
    final int TARGET_FPS = 60;
    final long OPTIMAL_TIME = 1000000000 / TARGET_FPS;
    long lastFpsTime = 0;
    while(true){
        long now = System.nanoTime();
        long updateLength = now - lastLoopTime;
        lastLoopTime = now;
        double delta = updateLength / ((double)OPTIMAL_TIME);

        lastFpsTime += updateLength;
        if(lastFpsTime >= 1000000000){
            lastFpsTime = 0;
        }

        this.updateGame(delta);

        this.repaint();

        try{
            Room.gameTime = (lastLoopTime - System.nanoTime() + OPTIMAL_TIME) / 1000000;
            System.out.println(Room.gameTime);
            Thread.sleep(Room.gameTime);
        }catch(Exception e){
        }
    }

解决方法:

最终你会想要转向像LWJGL这样的东西,但是让我强调,继续做你现在在做的事.它将教你基本面.

你的循环很好.看起来不错,让我提供一些指示:

>重绘不会立即渲染屏幕.它告诉RepaintManager在准备好时进行渲染.请使用invalidate paintImmediately. paintImmediately将阻止执行,直到重新绘制组件,以便您可以测量渲染时间.
> Thread.sleep通常有几毫秒的漂移.你应该使用它来防止你的循环使用太多CPU,但要确保你知道你是否睡了10毫秒你可能会睡5毫秒或者你可能睡20.
>最后:

double delta = updateLength / ((double)OPTIMAL_TIME);

如果updateLength小于OPTIMAL_TIME,请不要调用update.换句话说,如果delta小于1,则不要更新. This tutorial解释了为什么比我更好.

标签:java,game-engine
来源: https://codeday.me/bug/20190922/1813305.html