将 Canvas 和 JPanel 用于 2D 游戏引擎(和缓冲?)

Difference between using Canvas and JPanel for a 2D game engine (and Buffering?)

我从各种教程中了解到如何在 JFrame 之上使用 Canvas 来为 2D 游戏引擎渲染图像。我必须创建一个 BufferStrategy 来保持图像平滑等,但最近我听说使用 JPanel 代替渲染图像。我应该使用 JPanel 吗?如果是这样,我还需要创建一个 BufferStrategy 还是集成了它。我真的被误导了吗?我什至说得通吗?我是初学者,所以请随时尝试纠正我并指导我 - 出于某种原因我对此感到非常不知所措:P 谢谢。

缓冲策略

使用“主动绘画”。它使您可以直接控制何时绘制某些内容

  • 更好地控制帧速率
  • 具有低级别连接,并提供对硬件加速的访问

摇摆

使用“被动绘画”。有一个 RepaintManager 控制何时绘制什么以及绘制什么,它被发布到事件调度线程并与所有其他事件一起处理。

  • 没有直接控制绘画系统
  • 可变帧率

两者都

link通过相同的渲染管道,通常是 DirectX 或 OpenGL

游戏引擎

视情况而定。大多数游戏引擎必须以 Canvas 开头,因为这通常是 link Java 到底层渲染引擎的唯一途径。大多数游戏引擎都是低级本机绑定或 DirectX 或 OpenGL 上的光包装,让您可以直接(在)访问这些 API

一些引擎可能仍会直接使用 Swing,但它们会受到限制,并且可能适用于不需要 3D 或 high/consistent 帧速率的情况。

选择

这是个人意见。您需要恒定的帧速率吗?你想做 3D 还是 2D 就足够了?您想执行低级功能(纹理操作等)吗?

有用的参考资料