Java 独立的逻辑和渲染线程?

Java 独立的逻辑和渲染线程?,java,multithreading,logic,rendering,lwjgl,Java,Multithreading,Logic,Rendering,Lwjgl,我听过一些人建议在制作游戏时将逻辑和渲染分离成不同的线程。显然,虽然渲染需要以约60fps的速度进行,但逻辑可能只需要以约10fps的速度进行 关于这一点,我有几个问题: 如果改变场景的是逻辑,那么渲染怎么可能比逻辑快?当然渲染线程将重复绘制完全相同的图像,直到逻辑开始在屏幕上移动实体,等等 这难道不会产生各种令人讨厌的并发问题,因为逻辑和渲染可能需要同时访问游戏对象吗 我可以假设将逻辑和渲染保持在同一线程中是完全可以接受的吗?我正在使用LWJGL,它的教程似乎都建议使用一个通用的“游戏循环”,

我听过一些人建议在制作游戏时将逻辑和渲染分离成不同的线程。显然,虽然渲染需要以约60fps的速度进行,但逻辑可能只需要以约10fps的速度进行

关于这一点,我有几个问题:

  • 如果改变场景的是逻辑,那么渲染怎么可能比逻辑快?当然渲染线程将重复绘制完全相同的图像,直到逻辑开始在屏幕上移动实体,等等

  • 这难道不会产生各种令人讨厌的并发问题,因为逻辑和渲染可能需要同时访问游戏对象吗

  • 我可以假设将逻辑和渲染保持在同一线程中是完全可以接受的吗?我正在使用LWJGL,它的教程似乎都建议使用一个通用的“游戏循环”,其中包括逻辑和渲染

  • 精灵可以通过一系列帧设置动画,但不需要游戏逻辑(碰撞检测、移动等)

  • 您需要使用某种形式的同步或锁定

  • 这取决于渲染和逻辑代码部分的工作量

  • 如果游戏逻辑没有更改场景,则渲染线程可以通过为场景指定
    脏标记来检测此情况。如果场景没有变脏,渲染线程可能会再次返回旧的渲染场景。有时,由于草、树或旗帜等动画对象,即使游戏未执行任何操作,场景也会发生变化

  • 这是因为两个线程访问相同的数据。但是,如果游戏逻辑线程在本地处理对象的垃圾,并以原子方式更新这些垃圾,那么在处理这些数据时,对相同数据的并发访问应该减少。我想说的是,不要以细粒度的方式处理并发访问的数据,而是以粗粒度的方式来减少锁定

  • 在我看来,如果不需要的话,你永远不应该把设计复杂化。如果您有足够的时间在一秒钟内处理场景10次并绘制场景,则不应使用多个线程。所有的老游戏都是单线程的,而且很有效。一旦游戏变得越来越复杂,一个线程无法在1/60秒内完成所有任务,您可能需要使用多个线程来利用多核机器。但在引入许多线程之前,您应该等到需要的时候


  • 谢谢你非常详细的回答。因为我的游戏很简单,我想我会把它保持在一个线程。此外,我希望实体以60fps的速度移动,因为我总是发现它看起来更平滑。如果需要的话,我想我可以单独处理碰撞。