libGDX 中的 java 线程

标签 java multithreading libgdx

我正在使用 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/

相关文章:

java - 让 javaFX 11 应用程序在 docker 上运行

java - 简单的 : Element 'id' is already used

ios - Firebase调用回调函数后如何回到main_thread?

multithreading - MapReduce - 除了字数统计还有别的吗?

java - 在 libgdx java 中运行时旋转粒子

java - JGroups 是否仅供本地使用(LAN),还是可以协调互联网上的主机?

java - 在java中一次调用更新不同类型的对象

c++ - 为什么这个函数被标记为noexcept,但可以抛出?

java - 了解不同的坐标系,Tiled、Stage、Screen、

java - Box2D Libgdx黑屏