gpt4 book ai didi

java - 使用大图像的 Slick2D 图形性能问题

转载 作者:行者123 更新时间:2023-11-30 03:40:58 25 4
gpt4 key购买 nike

我正在用 Java 编写一个 2D 月球着陆器风格的游戏,并使用 Slick2D 库来处理图形。我在处理背景图像时遇到问题。

这是我的问题:我要在宇宙飞船后面的背景上绘制 3 层细节(星星、山脉和陆地,包括着陆点)。当船(屏幕中心)移动时,这些会在每个循环中重新绘制。

这些图层的图像为 4500 像素宽 x 1440 像素高。这主要是为了创造一些变化感(星星)并足够宽以容纳生成的山脉和土地(土地包括着陆点)。山脉和土地每回合都会生成,并且是绘制到持有图像中的多边形。

Slick2d(或 opengl)提示它无法处理这种尺寸的图像 - 它说它只能处理我的开发 PC 上 512 x 512 的纹理。所以...如果我一直在探索不同的方法来解决这个问题,包括:

a.在每个循环中进行多边形裁剪,以将多边形(山脉和陆地)减小到可显示的屏幕尺寸(640 x 480),但这在数学上似乎具有挑战性,或者

b.将我的图层图像分割成 512x512 的图 block ,然后用图 block 更新屏幕,这是我已经做的事情的扩展(包装图层以创建“无限”的世界),因此考虑到我的能力,这似乎更可行。

我的第一个问题(或者说是感觉检查,真的)是我错过了什么吗?我的图像虽然很大,但内容很少,例如黑色背景,上面有几行。有没有办法在 Slick2D/opengl 中压缩这些,或者我错过了一些与设置有关的东西,这意味着我可以让我的卡处理更大的图像? (根据我所读到的内容,我假设不会,但希望是永恒的。)

所以,假设我没有错过任何明显的事情,请继续第 2 部分...

作为一个快速的“我可能会摆脱这个”解决方法,我已恢复使用 BufferedImages 来保存图层,然后将其中的部分提取到 Slick2D 图像中,并在每个渲染循环中将它们绘制在屏幕上。这样做我得到了大约 3 FPS,这对于实时游戏来说显然有点慢。

创建我正在使用的 BufferedImages:

   BufferedImage im_stars = new BufferedImage(bWIDTH, bHEIGHT, BufferedImage.TYPE_INT_ARGB);
Graphics2D gr_stars = im_stars.createGraphics();

...然后我将内容绘制到它们上(星星等)

在我的渲染循环中,做一些数学运算来计算出我需要显示哪些图像 block (以应对包装/提供“无限”体验),然后将 BufferedImage 的相关部分提取到 Slick2D 图像(s)如下:

Image i1_star = Tools.getImage(stars.getStarImg().getSubimage((int) x1, (int) y1, width, height));
g.drawImage(i1_star, 0, 0);

我编写了一个静态辅助方法来将 BufferedImage block 转换为 Slick2D 图像,如下所示:

   protected static Image getImage(BufferedImage bi) {
Image im = null;
try {
im = new Image(BufferedImageUtil.getTexture("", bi));
} catch (IOException ex) {
Logger.getLogger(Tools.class.getName()).log(Level.SEVERE, null, ex);
}
return im;
}

根据我得到的 FPS,我猜这是一个不好的方法,尽管 3 看起来很低。当我使用我自己编写的代码做同样的事情时,我得到了大约 25 FPS!那么,是否有一种我所缺少的加速 Slick2D/opengl 方法来做到这一点,或者我是否又不得不平铺背景图像或将它们保存为多边形并开发多边形裁剪例程?

最佳答案

经过更多研究,我发现我的显卡使用 Slick2D 可以支持高达 4096 x 4096 像素的图像:

BigImage.getMaxSingleImageSize();

我已恢复在程序中使用宽度不大于此大小的 Slick2D 图像文件,现在帧速率约为 350 FPS,因此 BufferedImage 解决方法绝对是一个坏主意。

关于java - 使用大图像的 Slick2D 图形性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26827523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com