如何在Android中高效显示图像

时间:2015-02-20 22:48:10

标签: android animation canvas graphics

我在android中制作一个简单的2D游戏。然而,即使屏幕上只有少量图像,我也遇到了f​​ps的问题(大概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会有很大帮助吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

还有许多适用于Android的优质高效游戏引擎(例如LibGDX)。游戏引擎通常经过优化,可以显示,移动和动画多个图像,它们通常还具有许多其他有用的功能。

但是,如果您不想使用游戏引擎,我建议您使用OpenGL来获得一些提升。您也可以通过优化图像来获得一些提升。尽量减少图像的大小,不要使用太大的图像。还尝试有效地将图像加载到程序中。

答案 1 :(得分:0)

切换到openGL总会有很大帮助。但是你的问题是你要直接画到屏幕上。不要这样做。绘制到位图,然后在一次操作中将位图blit到屏幕。其表现将更高。它还允许你在第二个线程上进行绘制,只绘制到主要绘图上的屏幕。

答案 2 :(得分:0)

在切换到openGL之前,您可能希望尝试不重绘图像本身,而只是移动它。您只需要为图像设置新的LayoutParams。您可能还想查看TranslateAnimation以防您轻松移动内容。或者你使用矩阵变换。