我正在制作一款Java游戏,当我绘制图形时,游戏就会落后很多。
我目前绘制图形的方法是制作BufferedImage
,从中获取Graphics2D
,然后做一大堆:
g2d.drawImage(loadedImages.getImage(),x,y,null);
将所有图像打印到BufferedImage
后,我将BufferedImage
绘制到屏幕上。
我向BufferedImage
绘制了很多图像。有没有更好的方法来加快绘画时间?
我对图形和图形卡知之甚少。我应该使用显卡吗?我应该直接在屏幕上画画吗?我应该使用与drawImage()
完全不同的东西吗?
答案 0 :(得分:3)
如果您正在绘制合理数量的图像,性能应该很好。
确保每次绘制到屏幕时都不会创建新的BufferedImage
。例如,您可能需要Resources
singleton来管理所有图片,以便只加载和卸载一次图像。
如果您真的想要更高的性能,那么您将需要使用OpenGL。请参阅LWJGL,libgdx或JOGL。您可能还需要考虑像Slick这样的2D图形库。
答案 1 :(得分:1)
我发现扩展java.awt.Canvas并使用
很有用draw()
然后实际的void draw() {
Graphics g = bs.getDrawGraphics();
g.drawImage(image, x, y, w, h, null);
// Draw more things here...
// You can also make calls like `myObject.draw(g)` and whatever
// you draw onto `g` within those calls will show up.
bs.show();
g.dispose();
}
方法看起来像
myObject.draw(g)
这是我用来绘制很多东西的东西。然后在每个draw()
调用中,有时会有多个其他类似的调用被链接起来。通常,我的主for
方法中有一个或两个for(Entity e: entities) e.draw(g);
循环,只需说{{1}}或类似的东西。然后整个绘图链从那里开始。