Java Tile游戏缩放

时间:2012-04-06 17:42:37

标签: java 2d zoom tile graphic

我正在用Java构建一个基于2D自顶向下平铺的游戏。当然,您可以平移并放大游戏,目前放大10个不同的级别,其中每个图块适当地范围为10x10像素到100x100像素。目前,每个缩放级别的图块存储在单独的精灵表中,在程序启动时读入并存储在缓冲图像阵列中。我相信这不是解决这个问题的最好方法。

我正在寻找任何提高长期效率的技巧,最好只使用100x100瓷砖并在Java中动态扩展它们;不知何故在java中使用矢量图形(我很确定如何,但我确定谷歌可以帮助我)或者什么?

非常感谢!

2 个答案:

答案 0 :(得分:1)

我会变得充满活力。 通常在计算机图形学中,您使用矩阵,应用于图形上下文,修改您在其上绘制的所有内容。

这用于修改位置,比例,旋转等。不是将相机位置减去每个图块,而是将翻译应用到图形上下文,然后在世界位置绘制图块。图形上下文将负责将图块放置在正确的屏幕空间中。

我建议您阅读以下内容:

http://docs.oracle.com/javase/tutorial/2d/advanced/transforming.html http://www.javalobby.org/java/forums/t19387.html

答案 1 :(得分:1)

如果您正在进行固定缩放(即每个缩放级别与相机的固定距离),而不是流体缩放(播放器可以放大3.3倍,7.5倍,而不仅仅是1倍,2倍,3倍)等等,然后通过简单地应用缩放变换来试图解决这个问题是非常浪费的。这很诱人,因为这是最简单的方法,从实现的角度来看很容易理解,但这意味着在最大缩小时,你将要渲染一个在X方向上大10倍,在大10倍大的区域。 Y方向 - 所以你必须渲染的世界的区域比最大放大大100倍。我也怀疑你会喜欢当你缩小时你的纹理被硬件压扁的方式。计算机图形与光学不同 - 亚像素渲染,计算机图形中发生的其他事情如果将任务从软件/硬件上移除,将不会使纹理看起来非常好。

即使你进行流体缩放,我仍然会进行细节层次的纹理,并根据渲染世界和相机之间的距离动态交换它们。

另外,10个缩放级别?你确定你真的需要10个缩放级别吗?缩放通常用于2D游戏,允许您在不同的细节级别执行不同的活动,因为特定的缩放级别特别适合于某组活动。我不记得任何2D游戏需要10个缩放级别才能完成此任务。 3-5是我见过的最多,我从未觉得这还不够。在10个缩放级别的每个缩放级别生成图像似乎也是很多艺术作品。

你也可能会发现应用AffineTransform听起来是个好主意,但它的计算成本非常高,如果你需要60fps的性能,你就不太可能以这种方式实现它。不要接受我的话,试试吧,看看它有多么糟糕。