7

所以,我正在用 Java 创建一个 2d 自上而下的游戏。

我正在遵循Java 2D 中的说明:硬件加速 - 第 2 部分 - 缓冲策略以利用硬件加速。

基本上,我在想的是:
我希望能够轻松地向地图添加更多部分。所以我宁愿不走我见过的一些教程中建议的路线(每个地图图块都有一个周围图块的邻接列表;从中心图块开始,使用广度优先搜索填充屏幕)。

相反,我的想法是拥有屏幕大小的图块集合(为简单起见,例如 32x32),并且这些屏幕“块”中的每一个都会有一个引用每个相邻集合的列表。然后,我将为当前屏幕和 8 个相邻屏幕创建一个缓冲区,并在 VRAM 缓冲区中绘制可见部分。

我的问题是,这是解决此问题的正确方法,还是有更好的选择?我浏览了很多教程,但它们似乎都提供了相同的(看似高维护)选项。

看起来这将是一个更好的选择,因为在 tile 级别执行操作将需要 1024 倍的邻接列表。另外,我考虑只将可见部分放在 VRAM 中,而将“当前”屏幕及其相邻屏幕留在标准缓冲区中的原因是因为我是硬件加速的新手,并且不完全确定可以接受多少空间可用。因为 Java 无论如何都试图加速标准缓冲区,理论上它应该与将每个缓冲区放入 VRAM 一样快?

欢迎任何和所有建议!

4

1 回答 1

3

我没有研究过任何流行的基于图块的游戏引擎,但我会考虑使用fly-weight 模式来仅渲染在JScrollPane. JTable既是一个例子,也是一个可用的实现。

JTable附录:该方法的一个优点是视图模型分离,它允许将图块相关资源的获取委托给模型。这使得优化更容易,而无需更改视图。

即使没有滚动条,也可以scrollRectToVisible()通过扩展JComponent或适当的子类来利用。该setDoubleBuffered()方法也可能会有所帮助。

于 2011-08-13T09:08:37.090 回答