1

我目前正在尝试使用 SurfaceView 为 Android 平板设备创建游戏。我有精灵,什么都没有,但是如果我应该使用整个精灵表(其中包含每个动画),或者只是在图像文件上分离精灵,我正在努力。

例如,我的 spritesheet 名为 Bear.png,里面包含 16 张图片。我可以使用 Rect 为它们制作精美的动画(感谢 mybringback):

canvas.drawBitmap(bitmap, rectSrc, rectDest, null);

但是,我担心这样做最终会增长到大于堆大小。

但是,还有另一种方法。通过分离每个图像(bear1.png、bear2.png 直到 bear16.png),我还可以通过以下方式使用这些精灵创建动画:

Bitmap bitmap = Bitmap.decodeResource(context.getResources(), context.getResources().getIdentifier("bear" + index, "drawable", "com.example.game"));

然后将其调用到画布:

canvas.drawBitmap(bitmap, bitmapX, bitmapY, null);

现在也可以正常工作。当然,它大大减少了我的堆大小,因为我一次只使用 1 个图像。但是,因为好吧.. 因为,我几乎总是会想起 Bitmap.decodeResource(),我担心一次将许多动画放在一起时,可能会导致明显的延迟。

简而言之:
- Spritesheets:增加堆大小(最终可能导致 OutOfMemory 错误),但性能更好
- 不同图像文件上的 Sprites:减小堆大小,但可能会影响性能

我不完全确定使用哪种方法。如果我使用第二种方法(不同图像文件上的精灵)实际上可以吗?还是只使用精灵表会更好?

4

1 回答 1

0

没关系,我只是回答了我自己的问题。似乎 Bitmap.decodeResource() 每次迭代的渲染都滞后于整个画布,而不是渲染实际的 spritesheets 并使用Rect. 性能方面,如果在画布上遇到太多延迟,除了使用inSampleSize或使用GLSurfaceView.

于 2013-02-04T13:16:54.277 回答