我正在尝试编写我的第一个Android游戏,该游戏包含在圆形对象上移动并带有位图的对象。

我解码png:

moon=BitmapFactory.decodeResource(resources, R.drawable.moon);


然后,对于每个Ball对象,我一开始都要这样做(它们的大小可以不同):

scaledMoon=Bitmap.createScaledBitmap(game.moon, (int)(r*2), (int)(r*2), true);


当在画布上绘画时,我这样做:

c.drawBitmap(scaledMoon,x,y, null);


使用100个对象执行此操作,我得到了几乎恒定的22ms渲染时间。

但是当我这样做时(之前没有缩放!)

c.drawBitmap(game.moon, new Rect(0,0,game.moon.getWidth(),game.moon.getHeight()), new Rect((int)(x-r),(int)(y-r),(int)(x+r),(int)(y+r)), null);


我得到17毫秒的渲染时间...

当画一个圆时

c.drawCircle(x, y, r, color);


我得到24毫秒

什么...?

最佳答案

渲染最快的第三行是因为您重新使用了相同的位图,而不是用之前尝试预加载的所有位图填充视频内存;它不是一个新的,它只是为您要绘制的内容设置边界。至于绘制一个圆的24ms,我最好的选择是,与简单的矩形相比,计算和绘制点需要更长的时间。

10-08 15:00