gpt4 book ai didi

java.awt.Graphics ->graphics.drawImage 太慢,出了什么问题?

转载 作者:行者123 更新时间:2023-12-02 04:32:02 26 4
gpt4 key购买 nike

我想编写一个 2D 游戏引擎。我遇到的问题(我不使用opengl之类的东西,所以我用cpu渲染)是,我通过graphics.drawImage()只得到7fps;您有任何加快速度的建议或其他替代方案吗?

image = new BufferedImage(gc.getWidth(), gc.getHeight(), BufferedImage.TYPE_4BYTE_ABGR);
canvas.createBufferStrategy(1);
bs = canvas.getBufferStrategy();
g = bs.getDrawGraphics();
g.drawImage(image, 0, 0, canvas.getWidth(), canvas.getHeight(), null);

我的渲染器应该简单地将帧(宽 320 高 240 像素)着色为青色,他也这么做了,但最高帧率为 8 fps。渲染器:

private int width, height;
private byte[] pixels;

public Renderer(GameContainer gc){
width = gc.getWidth();
height = gc.getHeight();
pixels = ((DataBufferByte)gc.getWindow().getImage().getRaster().getDataBuffer()).getData();
}

public void clear(){
for(int x = 0; x < width; x++){
for(int y = 0; y < height; y++){
int index = (x + y * width) * 4;
pixels[index] = (byte)255;
pixels[index+1] = (byte)255;
pixels[index+2] = (byte)255;
pixels[index+3] = 0;
}
}
}

最佳答案

我不太确定如何优化您当前的示例(但是在 clear 中使用数据缓冲区真的会比仅使用 Graphics.fillRect 带来加速吗?) ,但我可以给您一些常规的 Java2D 技巧。

首先,使用与您的计算机最兼容的图像类型很重要。这是查找兼容图像的方法:

private static final GraphicsConfiguration GFX_CONFIG = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration();

public static BufferedImage toCompatibleImage(final BufferedImage image) {
/*
* if image is already compatible and optimized for current system settings, simply return it
*/
if (image.getColorModel().equals(GFX_CONFIG.getColorModel())) {
return image;
}

// image is not optimized, so create a new image that is
final BufferedImage new_image = GFX_CONFIG.createCompatibleImage(image.getWidth(), image.getHeight(), image.getTransparency());

// get the graphics context of the new image to draw the old image on
final Graphics2D g2d = (Graphics2D) new_image.getGraphics();

// actually draw the image and dispose of context no longer needed
g2d.drawImage(image, 0, 0, null);
g2d.dispose();

// return the new optimized image
return new_image;
}

在使用完 Graphics 对象后处理它们通常也是一个很好的做法(如果您在紧密循环中创建它们可能会有所帮助)。

以下是一些提供一些提示的其他问题:

Java2D Performance Issues

Java 2D Drawing Optimal Performance

关于java.awt.Graphics ->graphics.drawImage 太慢,出了什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31325742/

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