使用gameLoop时实现多线程的正确方法是什么

我正在研究一款基于键盘输入来移动汽车图像的游戏。目前,我正在使用以下游戏循环:

private void runGameLoop() {
        window.setVisible();
        isRunning = true;
        final double FRAMES_PER_SECOND = 60;
        double timePerupdate = 1000000000 / FRAMES_PER_SECOND;
        double timeFromLastUpdate = 0;
        long now;
        long last = System.nanoTime();
        while (isRunning) {
            now = System.nanoTime();
            timeFromLastUpdate += (now - last) / timePerupdate;
            last = now;
            if(timeFromLastUpdate >= 1) {
                tick();
                render();
                timeFromLastUpdate--;
            }
        }
    }

tick方法更新汽车图像的位置,然后render方法将在屏幕上渲染图像(具有新位置)。 我想将新图像位置的计算放在单独的线程上,因为此刻计算需要花费很长时间并且会导致渲染滞后。有没有办法在仍然实现游戏循环的同时使用多线程? 预先感谢。

hhuomjk08 回答:使用gameLoop时实现多线程的正确方法是什么

Perhpas,您可以执行与Android类似的操作。在Android中,有一个主线程,就像您的游戏循环一样。它具有用于可运行对象的处理程序,该可处理对象从后台/并发线程发布到主线程。

因此,在每个循环周期中,主线程都会执行由feom后台线程发布的所有可运行对象。

请注意,不应在可运行对象(在主线程中执行)中进行计算,而只能在可运行对象中传递结果/更新内容。

本文链接:https://www.f2er.com/1456174.html

大家都在问