我正在使用 libGDX 制作游戏,我真的很想对游戏进行线程化处理,所以我在单独的线程上运行一个绘制循环和一个逻辑循环,就像您使用 paintcomponent 循环制作一个简单的 java swing 游戏一样可运行的运行循环。
我在 c 中使用线程很有经验,但在 java 中却没有那么多。
我能够创建线程的唯一方法是创建一个扩展线程的类,然后在其中创建运行循环。
但是创建运行循环的目的是允许每个屏幕自由计算逻辑,所以我最终需要某种实现了自定义线程类的抽象屏幕类。
我想问一下,对于这种情况,是否有更简单或更标准的方法来实现线程。
最佳答案
libGDX 库已经为 OpenGL 上下文更新运行了一个单独的渲染线程。参见 http://code.google.com/p/libgdx/wiki/TheArchitecture#The_Graphics_Module
We already learned that the UI thread is not executed continuously but only scheduled to run by the operating system if an event needs to be dispatched (roughly :p). That's why we instantiate a second thread we usually refer to as the rendering thread. This thread is created by the Graphics module that itself gets instantiated by the Application at startup.
ApplicationListener.render()
每次屏幕刷新时,此渲染线程都会调用主游戏对象上的方法一次(因此它应该约为 60hz),因此只需将渲染循环的主体放入此方法的实现中即可。
您可以在 create
中创建一个额外的后台线程(例如,用于游戏逻辑)你的方法 ApplicationListener
(一定要在 dispose
方法中清理它)。除了 render
线程,我认为任何预先存在的线程都不适合游戏逻辑。
对于线程之间的通信,您可以使用任何现有的 Java 同步方法。我用过 Java 的 ArrayBlockingQueue<>
将请求发送到后台线程。我用过 Gdx.app.postRunnable()
让我的后台线程将数据推送到渲染线程(这样的 Runnables 在下一帧运行,在调用 render()
之前)。
关于libGDX 中的 java 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12671089/