当前位置:  开发笔记 > 编程语言 > 正文

Java 2D绘图最佳性能

如何解决《Java2D绘图最佳性能》经验,为你挑选了3个好方法。

我正在编写Java 2D游戏.我正在使用内置的Java 2D绘图库,绘制了一个Graphics2D,我从一个来自Canvas in JFrame的BufferStrategy中获取(有时是完全筛选的).BufferStrategy是双缓冲的.重绘是通过计时器主动完成的.我遇到了一些性能问题,特别是在Linux上.

Java2D有很多方法可以创建图形缓冲区和绘制图形,我只是不知道我做的是否正确.我一直在尝试使用graphics2d.getDeviceConfiguration().createCompatibleVolatileImage,看起来很有前景,但我没有真正的证据,如果我将绘图代码切换到那个,它会更快.

根据您的经验,在Java 1.5+中将2D图形渲染到屏幕上的最快方法是什么?请注意,游戏相当遥远,因此我不想切换到完全不同的绘图方法,如OpenGL或游戏引擎.我基本上想知道如何使用Graphics2D对象以最快的方式将内容绘制到屏幕上.



1> Zarkonnen..:

这篇文章的答案,Consty的答案以及我自己的研究的综合:

什么有效:

使用GraphicsConfiguration.createCompatibleImage来创建你画什么兼容的影像.这绝对必要!

使用双缓冲绘图Canvas.createBufferStrategy.

使用-Dsun.java2d.opengl=True其中可加快绘图.

避免使用变换进行缩放.相反,缓存您要使用的图像的缩放版本.

避免半透明图像!位掩码图像很好,但Java2D中的半透明度非常昂贵.

在我的测试中,使用这些方法,我的速度提高了10倍到15倍,使得适当的Java 2D图形成为可能.



2> Consty..:

我遇到了和你想象的一样的问题.看看我的帖子:

Java2D性能问题

它显示了性能下降的原因以及如何解决它.但并不能保证在所有平台上都能正常运行.你会在帖子中看到原因.



3> basszero..:

这是我头顶的一些提示.如果你更具体,你想要做什么,我可以提供更多帮助.听起来像游戏,但我不想假设.

只绘制你需要的东西!不要盲目地一直调用repaint(),尝试一些像重绘(Rect)或重绘(x,y,w,h)的兄弟姐妹.

对alpha混合要非常小心,因为混合图像/基元可能是一项昂贵的操作.

尝试尽可能多地预渲染/缓存.如果你发现自己以同样的方式画一个圆圈,一遍又一遍,考虑插入BufferedImage,然后绘制BufferedImage.你为了速度而牺牲内存(典型的游戏/高性能图形)

考虑使用OpenGL,使用LWJGL的JOGL.JOGL更像Java,而LWJGL在OpenGL访问之上提供更多游戏功能.OpenGL可以绘制数量级(使用适当的硬件和驱动程序),而不是Swing.

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有