繁体   English   中英

如何加速我的Java游戏的FPS?

[英]How can I speed up my Java game's FPS?

我正在制作一个Java游戏,当我绘制图形时游戏滞后很多。 我目前绘制图形的方法是制作BufferedImage ,从中获取Graphics2D ,然后做一大堆:

g2d.drawImage(loadedImages.getImage(),x,y,null);

将所有图像打印到BufferedImage ,我将BufferedImage绘制到屏幕上。

我在BufferedImage绘制了很多图像。 有没有更好的方法来加快绘画时间? 我对图形和图形卡知之甚少。 我应该使用显卡吗? 我应该直接在屏幕上画画吗? 我应该使用与drawImage()完全不同的东西吗?

如果您正在绘制合理数量的图像,性能应该很好。

确保每次绘制到屏幕时都不创建新的BufferedImage 例如,您可能有一个Resources 例,您可以在其中管理所有图像,以便您只加载和卸载一次图像。


如果您真的想要更高的性能,那么您将需要使用OpenGL。 请参阅LWJGLlibgdxJOGL 您可能还想考虑像Slick这样的2D图形库。

我发现扩展java.awt.Canvas并使用它很有用

BufferStrategy bs;
void init() {
    createBufferStrategy(2);// or 3 for triple-buffering
    bs = getBufferStrategy();
}

然后实际的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); 或类似的东西。 然后整个绘图链从那里开始。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM