我正在android中制作一个简单的2d游戏。然而,即使屏幕上只有几张图像,我也会遇到fps的问题(大约15-25,而且很断断续续)。
目前我使用画布,只需在每帧上设置一个图像,上面有我需要显示的所有内容
以下是我的一些渲染代码:
public void render(Painter g) {
g.setColor(Color.rgb(208, 244, 247));
g.fillRect(0, 0, GameMainActivity.GAME_WIDTH, GameMainActivity.GAME_HEIGHT);
g.setColor(Color.rgb(139,69,19));
g.fillRect(0, 1400, GameMainActivity.GAME_WIDTH, GameMainActivity.GAME_HEIGHT - 1400);
g.drawImage(Assets.background3stone, currentBackground3X, 141);
g.drawImage(Assets.background3stone, currentBackground3X + 3459, 141);
g.drawImage(Assets.background2stone, currentBackground2X, 141);
g.drawImage(Assets.background2stone, currentBackground2X + 3459, 141);
g.drawImage(Assets.ground, currentBackground1X, 760);
g.drawImage(Assets.ground, currentBackground1X + 3000, 760);
renderNews(g);
renderButtons(g);
g.drawImage(Assets.leaderboard, 40, 180, 148, 148);
g.drawImage(Assets.achievements, 40, 354, 148, 148);
g.drawString("FPS: " + frameValue, 50, 200);
}
此代码适用于游戏循环的每次迭代。
有人知道如何优化我的表现吗?目前,我几乎每帧都会重新绘制所有内容,有没有办法不重新绘制静态图像?切换到openGl会有很大帮助吗?
谢谢!
Android也有很多优秀高效的游戏引擎(例如LibGDX)。游戏引擎通常经过了很好的优化,可以显示、移动和动画化多个图像,而且它们通常还具有许多其他有用的功能。
然而,如果你不喜欢使用游戏引擎,我建议你使用OpenGL来获得一些提升。您还可以通过优化图像来获得一些提升。尽量缩小图像的大小,不要使用太大的图像。还要尝试有效地将图像加载到程序中。
切换到openGL总是有很大帮助的。但你的问题是你直接在屏幕上画画。不要那样做。绘制位图,然后在一次操作中将位图闪电式传输到屏幕上。它的性能会高得多。它还允许你在第二个线程上绘制,只在主线程上绘制到屏幕上。
在切换到openGL之前,您可能不想重新绘制图像本身,只想移动它。您只需要为图像设置新的LayoutParams。你可能还想看看TranslateAnimation,以防你在轻柔地移动东西。或者使用矩阵变换。