- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我从事 Java 2D 游戏已有一段时间了。它是一个带有像素(整数)数组的光栅图形系统。
private BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
private int[] pixels = ((DataBufferInt) image.getRaster().getDataBuffer()).getData();
然后我分别创建一个整数数组,使用屏幕对象(从外部图像文件呈现,例如 .png)对其进行操作,然后将该数组复制到我的主数组中,该数组投影在屏幕上。我发现在迭代中使用数组复制方法没有性能差异(而且真的没想到)。无论如何,图形渲染得很好,游戏进展顺利。
但是,我发现这会占用大量 CPU。我的 Activity 监视器显示应用程序使用了超过 100% 的 CPU。这显然是因为我在每次更新(每秒 60 次)时迭代像素数组(76k 整数)。
我选择这种技术是出于教育目的。这是一个个人项目,我只是想深入了解 Java 图形。我决不会嫁给这种渲染技术。
我的问题分为三个相关部分...
最佳答案
OpenGL 通常与 3D 图形应用程序相关联,但它也可用于 2D 应用程序。使用正交投影和带纹理的四边形代替 Sprite 和背景图像,您可以构建完全没有 3D 元素的游戏的图形和界面,尽管事实上绘图是在某种意义上完成的3D。
我没有在 Java 中使用 OpenGL 的经验。但是,我知道可以使用 LWJGL图书馆,可能还有其他人。如果您想大幅提高图形性能,您应该检查一下。
要回答你的第二个问题,这个应用程序中的 OpenGL 实际上与你的方法有很大不同,使用与在 3D 中绘制纹理多边形相同的技术,而不是简单的 block 图像传输到帧缓冲区,虽然像素数据 可以访问和操作。
这是一个使用 OpenGL 和 C 的 2D 图形示例,来自一个我从未完成的游戏项目,但仍然可以作为我正在谈论的内容的一个很好的视觉示例。在这种情况下,我没有使用正交投影,而是使用透视矩阵,通过在 3D 空间中绘制不同深度的各个图层来获得视差效果。
关于java - 像素阵列过于占用 CPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14822867/
我是一名优秀的程序员,十分优秀!