首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 2D绘图优化性能

Java 2D绘图优化性能
EN

Stack Overflow用户
提问于 2008-09-29 12:32:30
回答 9查看 42.4K关注 0票数 34

我正在编写一个Java 2D游戏。我使用内置的Java2D绘图库,在从BufferStrategy获取的JFrame中的画布(有时是全屏的)上绘制Graphics2D。BufferStrategy是双缓冲的。重绘是通过计时器主动完成的。不过,我遇到了一些性能问题,尤其是在Linux上。

Java2D有如此之多的方法来创建图形缓冲区和绘制图形,以至于我不知道我做的是否正确。我一直在试验graphics2d.getDeviceConfiguration().createCompatibleVolatileImage,,它看起来很有前途,但我没有真正的证据,如果我把绘图代码切换到它,它会更快。

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

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2008-10-13 07:23:09

我想我和你有同样的问题。在这里查看我的帖子:

Java2D Performance Issues

它显示了性能下降的原因以及如何修复它。然而,它并不能保证在所有平台上都能很好地工作。你会在这篇文章中看到原因。

票数 16
EN

Stack Overflow用户

发布于 2008-10-14 09:23:13

这篇文章的答案,Consty's的答案和我自己的研究的综合:

有效的方法:

  • 使用GraphicsConfiguration.createCompatibleImage创建与您正在绘制的内容兼容的图像。这是绝对必要的!在Canvas.createBufferStrategy.
  • Use -Dsun.java2d.opengl=True中,
  • 使用双缓冲绘图来加速drawing.
  • Avoid,使用变换进行缩放。相反,缓存你将要使用的图像的缩放版本。
  • 避免半透明图像!位遮罩图像很好,但在Java2D中半透明效果非常昂贵。

在我的测试中,使用这些方法,我的速度提高了10倍-15倍,使得正确的Java2D图形成为可能。

票数 34
EN

Stack Overflow用户

发布于 2008-10-01 11:50:38

这里有一些我想起来的小贴士。如果你说得更具体,你想做什么,我也许能帮上更多忙。听起来像个游戏,但我不想假设。

只画你需要画的东西!不要总是盲目地调用repaint(),尝试一些类似的方法,比如repaint(Rect)或repaint(x,y,w,h)。

要非常小心地使用alpha混合,因为它对于混合图像/基元来说可能是一个昂贵的操作。

尝试尽可能多地预渲染/缓存。如果您发现自己一次又一次地以相同的方式绘制一个圆,请考虑将其绘制到BufferedImage中,然后直接绘制BufferedImage。你正在牺牲内存来换取速度(典型的游戏/高性能图形)

考虑使用OpenGL,使用LWJGL。JOGL更像Java,而LWJGL在OpenGL访问之上提供了更多的游戏功能。与Swing相比,OpenGL可以(通过适当的硬件和驱动程序)绘制几个数量级的数据。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/148478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档