gpt4 book ai didi

java - 如何将多张小图拼接成一张大图?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:02:15 24 4
gpt4 key购买 nike

我在做游戏。它是一个 2D 游戏, map 是由这样的双循环绘制的:

for(int i = 0; i < mapArray.length; i++){
for(int j = 0; j < mapArray[1].length; j++){
//if statement for if its on the screen
g.drawImage(tiles.get(mapArray[i][j]).getImage(), j * textureSize, i * textureSize, null);

}
}

它们是 32x32 的图像,我想知道一开始将它们拼接在一起以创建一个大图像会更有效地绘制。生成的图像只有 1500x1500 左右。

我正在考虑将它拼接成一个图像(特别是因为我计划将图像变小,这会使循环需要更多时间。)这样它就不必每次都运行两次 for 循环渲染时间(以 60 FPS 拍摄)。但我不知道该怎么做,如果我这样做真的会提高性能吗?

此外,我可以将它们拼接成行,并且只渲染屏幕上的行(以消除大图像问题)所以它仍然比我现在得到的疯狂循环要低得多。

编辑:最后一件事,如果您能提供一个示例说明如何在没有额外库的情况下执行此操作,那将是最佳的。

我目前有这个拼接代码:

编辑:现在有效。留在这里留给 future 的读者:

 public void stitchImages(){

BufferedImage temp = new BufferedImage( <Width> , <height> , BufferedImage.TYPE_INT_RGB);
Graphics2D g = (Graphics2D) temp.getGraphics();

for (int b = 0; b < mapArray.length; b++) {
for (int a = 0; a < mapArray[b].length; a++) {


g.drawImage(tiles.get(mapArray[b][a]).getImage(),
(int) mapX + a * textureSize, (int) mapY + b
* textureSize, null);



}
}


mapImage = temp;


}

最佳答案

创建一个新图像来封装所有图像。加载时绘制图像,然后在 paintComponent() 中绘制图像

BufferedImage im = new BufferedImage(1500,1500,BufferedImage.TYPE_INT_RGB);

private void init() {

Graphics g = im.getGraphics();

for(int i = 0; i < mapArray.length; i++){
for(int j = 0; j < mapArray[1].length; j++){
//if statement for if its on the screen
g.drawImage(tiles.get(mapArray[i][j]).getImage(), j * textureSize, i * textureSize, null);

}
}
}

public void paintCompoent(Graphics g) {
super.paintComponent(g);
g.drawImage(im,0,0,null);
}

编辑:

关于只绘制屏幕上的线条的想法,您可以通过创建一个窗口大小的 Image 并向其绘制来实现。但总的来说,绘制大图像并不是什么大问题(只要图像适合内存并且你没有得到 OutOfMemoryException),因为你的 GPU 的能力会消耗你的 CPU 的能力

关于java - 如何将多张小图拼接成一张大图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27388103/

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