我目前正在尝试使用 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:减小堆大小,但可能会影响性能
我不完全确定使用哪种方法。如果我使用第二种方法(不同图像文件上的精灵)实际上可以吗?还是只使用精灵表会更好?