2012-02-08 93 views
1

我正在使用Canvas.drawBitmap()Bitmap绘制为SurfaceView。这似乎真的减少了我的帧率,我想知道我能做些什么来解决这个问题。我参考了在onDraw()方法之外创建的位图。我确定图像很小,不透明,像素格式匹配......等等。当我不画图像时,帧速率上升约10-15 FPS。任何想法来加速这一点?我经历了明显的滞后。绘制位图作为SurfaceView背景

创建位图的一切之外...

private Bitmap bitmapPlayer = BitmapFactory.decodeResource(getResources(), R.drawable.player); 

然后在我的onDraw()方法...

canvas.drawBitmap(bitmapPlayer, null, drawingRect, null); // drawingRect is the Rect to draw the Bitmap inside of 
// ... Rest of drawing code 
+0

你好,你可以发布你的代码?如果你传递一个对象的引用,你不应该看到一个巨大的下降。 – garyamorris 2012-02-08 20:44:48

+1

@garyamorris我用一些代码更新了我的帖子。游戏仍然可以玩,但我注意到,当我没有画出“Bitmap”时,游戏运行更流畅。 – 2012-02-08 20:49:20

回答

1

我只能假设你正在做的事情的逻辑在沉重的绘图调用,如果你没有看到你的代码和下面的例子之间的任何差别,

http://www.droidnova.com/playing-with-graphics-in-android-part-iii,176.html

我会开始看看下面的内容,并为绘图使用图形硬件。

http://developer.android.com/resources/articles/glsurfaceview.html

希望这有助于

+0

感谢您的链接,一切似乎都很好。我的确有很多计算工作正在完成,但是在没有'canvas.drawBitmap()'调用的情况下,游戏运行速度非常平滑,在〜50fps。当我添加它时,它将它降低到〜40fps,我注意到每隔几秒就会有一个滞后,然后再继续渲染几秒钟......所有内容在drawBitmap()调用的整个过程中平稳运行。 – 2012-02-08 21:01:17

+0

也许OpenGL是我唯一的选择。这是值得一试的,我有点熟悉它,但我试图避免这个游戏。 – 2012-02-08 21:02:19

+0

真棒,我倾向于真正痴迷于fps,尽管我试图打破这种习惯。好运 – garyamorris 2012-02-08 21:17:04

0

如何大是您正在使用的背景位图。如果尺寸过大,只有一个尺寸,并且没有为hdpi,mdpi等创建,那么您可能会引用一个不必要的图像。如果是这种情况,我会使用BitmapFactory类来创建一个与Canvas的宽度和高度相匹配的缩小版图像。

P.S.推荐PNG图像,因为它们是最有效的。

+0

感谢您的想法,我确实有不同的屏幕大小的单独的图像,他们都是PNG的...我会尽量扩大它们以适应完美,也许这将有所帮助。它可能会减少它在'Canvas.drawBitmap()'方法中自动执行的缩放比例。 – 2012-02-09 01:15:23