jME使用了很多游戏引擎中非常普遍的方法(并且还用于其他一些用户界面库,例如Swing).
游戏引擎所做的一切都在一个线程中完成.这可以称为LWJGL线程,但由于jME可以与LWJGL的替代品一起使用,因此将其称为Render Thread或仅称为jME Thread更为通用.
确实所有事情都在Render线程上完成,并且确实使用了轮询机制.例如,如果您按住“ left”键,则在渲染线程上将调用每个帧的相关控件或应用程序状态,并将您向左移动tpf修改的量. Tpf是每帧时间,对于保持平稳的运动以及使游戏系统以相同的速度独立于帧速率运行非常重要.
通常,jME3中唯一使用单独线程的是物理引擎.该线程具有用于进行物理更新的线程,然后使用适当的机制将更改推送到“渲染”线程.不过,系统会为您处理此问题,因此您无需担心.
>线程围绕游戏循环运行.每次循环时,它都会检查它需要做的事情(例如入队任务,初始化应用程序状态,渲染等.它在每个活动的Controller和控件中调用update等).一旦完成所有更新,便继续执行渲染.所有这一切都发生在每一个帧上,但是计算机是如此之快,以至于它仍然可以处理所有这些并以良好的帧频渲染游戏.
>这是一个实现细节,您不必担心它肯定会起作用,而不必担心.我认为添加实际上会排队并在下一帧中处理.
>一切都从同一循环处理. jME调用Nifty,以允许Nifty进行处理.作为该处理的一部分,Nifty会检测事件并触发回调.这意味着回调已经进入渲染线程,因此您可以安全地修改场景图. jME使用一些特别编写的集合(例如SafeArrayList)允许您在迭代场景图的同时修改场景图.
>更新,渲染,更新,渲染等.检测到更新时,事件触发通常作为更新过程的一部分发生.要通过在Application类中查找代码来开始查找代码,您应该能够通过对start()调用进行跟踪来找到其中的主游戏循环.
jME3线程教程涵盖了很多内容: