我正在为基于 2d 瓷砖的 RPG 游戏制作地图编辑器,但遇到了障碍。问题实际上是如何为非常大的地图(例如 300x300 瓦片)有效地绘制网格线。
最初,我每次移动鼠标或单击时都会调用重新绘制整个网格面板(因为它允许您拖动并突出显示您悬停的图块)。这对于大型地图来说太可怕了,而且速度非常慢。
所以我的解决方案是在创建新的空地图时为指定大小的网格创建一个缓冲图像,并在每次调用paint时重绘该图像。这工作得很好,除了 200x200ish 以上的任何东西,java 在创建缓冲图像时会耗尽堆空间。我真的不能有一个预加载的图像,因为用户应该能够将新地图指定为任意大小。另外,我喜欢在瓷砖上绘制网格,否则瓷砖会遮住线条,看起来更乱。这意味着每次添加瓷砖时都必须再次绘制网格,对吗?
我的问题是,有没有另一种方法来绘制一个非常大的网格,每次移动鼠标时都会重新绘制?Tiled 程序可以轻松创建 1000x1000 或更大的地图,它是如何完成的?谢谢
编辑: 我的意思是实际的网格线,而不是像瓷砖这样的网格内容。现在,当绘制网格时,它会遍历 2D 数组并在图块的每个长度处绘制一条线。
编辑: 我通过仅绘制屏幕的可见部分来使其工作。事实证明,在 JScrollPane 中找到视图窗格的坐标并不难。:)