用于创建的Java Swing合成图像输出的最佳实践(Best practice for creat

2019-10-20 12:21发布

林工作的一个2d游戏中的Java Swing,其中一个程序产生的环境是由低分辨率图像的平铺阵列表示。 目前,这是所有中在JLabel html标签(换行)。

在此之上,我想显示字符的精灵,它不会占用一个完整的瓷砖,但会有一些alpha分量。 在过去,在JS / html和JS /帆布,我已经简单地由具有alpha通道精灵瓷砖以及位于它们的正上方一个地砖,使用表和/或绝对定位。

在java中摇摆,但是,绝对定位(与大多数HTML为此事)似乎不那么有效。

由于精灵绝不会/重叠二楼砖之间,明显的解决方案是让一堆预先计算的图像文件以外的游戏 - 在每种类型的地板砖之一的每个字符,但是,这将缩减磁盘空间(工作)呈指数使用的图像的数量,并且好像它不应该是必要的。

从我所看到的,它看起来像它应该能够创建运行在所有这些图像Bufferedimages,无论是预先计算他们都在启动时,或做一些需要每一帧。

如果我能做到上面的,我也许还能把我需要到一个大的位图的每个帧的所有图像,并显示。 这也可以减少帧的非同步加载,如果我使系统过载。

上述选项的,什么似乎是最好的? 或者是有,我完全缺少的另一个明显的解决方案? 如果解决方案是使合成图像,可能有人点我在正确的方向就如何做到这一点? 非常感谢。

Answer 1:

本主题将采取整本书,但本质上,你所能做的就是...

创建一个自定义组件(从扩展JPanel或例子),它是用来渲染的世界,这多少使得将取决于你的需求的观点,但你可以只渲染整个世界的一小部分。 这一点很重要,因为如果它没有显示出来,你不想渲染。

paintComponent这个组件的方法,你会渲染当前视图的各个层。

如果使用png图像,那么这是作为计算视图和虚拟世界之间的位置,并且使用简单Graphics#drawImage 。 如果你的模型是很好的优化,你甚至可以在单个渲染循环之内达到这个目标,那就是,对于每一个“瓦”的位置,你能确定什么是内要显示和单独建立每个瓦的输出,而然后使用多个环向渲染每一层。

代替内呈现整个视图的paintComponent方法,还可以使用一个背衬缓冲器,其被制备离屏,诸如地面层,它被简单地画成在单一步骤paintComponent方法,这将有助于增加整体性能。

根据你的需要,你可以使更多或更少的这个后盾缓冲区需要您的需求...

看看表演风俗画更多细节

最佳做法将回落至发动机整体设计更方面。 从性能上看,越少,你可以画得越快将成为。



文章来源: Best practice for creating a composite image output for Java Swing