我正在构建一个游戏,我需要将〜30个64x64块渲染到屏幕。 通常我会用libgdx做类似的工作,但这次我想使用本地Java方法。高效地渲染多个图像
对于一个样本测试,我加载10块并渲染它们 - 将我的fps从大约300下降到35. 我在这里的笔记本电脑有点不好,但我没想到他这么早就崩溃了。如果你只是看看我的代码,并给我提示如何更有效地渲染 - 这将是很好的。我想我也没有100%的理解BufferedImage和Graphics的概念。
顺便说一句,我的规格是: *睿i5-2520M CPU @ 2.5GHZ(获得30%左右的工作量,同时调试) * 4GB内存 * NO GPU
---------- ------- CODE ----------------------------------------
的图形和图像的声明:
public BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
public Graphics2D g;
的环路
while (running) {
long now = System.nanoTime();
unprocessed += (now - lastTime)/nsPerTick;
GraphicUtil.setDelta(now - lastTime);
lastTime = now;
boolean shouldRender = true;
while (unprocessed >= 1) {
ticks++;
gameTick();
unprocessed -= 1;
shouldRender = true;
}
if (shouldRender) {
frames++;
input.tick();
render();
}
if (System.currentTimeMillis() - lastTimer1 > 1000) {
lastTimer1 += 1000;
System.out.println(ticks + " ticks, " + frames + " fps");
frames = 0;
ticks = 0;
}
}
渲染() - 在我的主循环方法
public void render() {
BufferStrategy bs = getBufferStrategy();
if(bs == null) {
createBufferStrategy(2);
return;
}
switch(currentScreenId) {
case Screen.MENUSCREENID :
menuScreen.handleInput();
menuScreen.render();
break;
case Screen.HOWTOSCREENID :
howToScreen.handleInput();
howToScreen.render();
break;
case Screen.GAMESCREENID :
gameScreen.handleInput();
gameScreen.render();
break;
}
Graphics g2 = bs.getDrawGraphics();
g2.drawImage(GraphicUtil.toCompatibleImage(image), 0, 0, getWidth(), getHeight(), null);
g2.dispose();
//
bs.show();
}
渲染() - 在我gameScreen
public void render() {
clearScreen(Color.BLACK);
//Render blocks
for(Block b : blocks.values()) {
game.g.drawImage(blockImage, (int) b.getBounds().x, (int) b.getBounds().y, blockImage.getWidth(null), blockImage.getHeight(null), null);
}
}