我对c中的线程有经验,但在java中却没有那么多
我能够创建一个线程的唯一方法是创建一个扩展线程然后在那里创建运行循环的类
但是制作运行循环的关键是允许每个屏幕自由地计算逻辑,所以我最终需要某种具有自定义线程类的抽象类
我问是否有更简单或更标准的方法来实现这种情况的线程
解决方法
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),所以只需将渲染循环的主体放在此方法的实现中.
您可以在ApplicationListener的create方法中创建一个额外的后台线程(例如,用于游戏逻辑)(确保在dispose方法中清除它).除了渲染线程之外,我认为任何预先存在的线程都不是游戏逻辑的正确位置.
对于线程之间的通信,您可以使用任何现有的Java同步方法.我使用过Java的ArrayBlockingQueue<>将请求发送到后台线程.我使用Gdx.app.postRunnable()
来获取后台线程以将数据推送到渲染线程(这样的Runnables在下一帧上运行,然后调用render()).