(如果您想跳过所有这些文本,可以直接转到“ 问题”底部的版本)
你好,伙计们!
我是一名初学者,目前正在开发2D RPG游戏。它基本上由一张地图组成,玩家可以在该地图上行走(向西,西北等8个可能的方向)并与物体,生物和其他物体互动。玩家的角色行走动画每个可用的行走方向包括9个精灵,总共72个精灵。我在单独的.png文件和有组织的Sprite工作表中都有这些Sprite。
直到几天前,我一直在游戏中使用单个精灵。我将其可绘制ID加载到int[][]
数组中,然后在绘制每个帧时,我将解码(使用BitmapFactory.decodeResource()
方法)必要的精灵并将其传递给我的渲染器类,该类将然后画出来。
经过一番思考,我决定尝试使用精灵表来代替,因为对精灵图像的不断解码使我感到困扰。为此,我将包含所有所需精灵的精灵表的位图解码,并将其存储到成员变量中。根据下一帧所需的Sprite,我的程序将从Sprite工作表(先前保存到内存)中裁剪出所需的Sprite,根据播放器的设备需要调整其大小,然后将其传递给我的渲染器以进行绘制。
问题是,我无法确定哪种方法更有效!虽然很容易测量已解码的精灵表位图在播放器的内存(大约4MB)中占用了多少内存(存储在成员变量中)(但存储在成员变量中),但很难知道我的程序用于不断解码小位图的内存量,这相当于各个精灵。有人对我如何进行比较有任何见解吗?或者也许可以分享以前与此主题相关的经验?我已经搜索了几个小时,尽管找到了许多有关如何有效加载位图的有用信息以及关于库的建议(例如Glide,Fresco和Picasso),但我仍然找不到答案,也找不到更好的方法。预先感谢!
简短的问题:不断解码小位图还是只解码一次大位图,然后根据需要裁剪小位图,会更好吗?
P.S。:我知道,在游戏中创建动画的两种方法都可能效率不高。但是,为了我的学习(我创造这款游戏的主要目标),我不想使用像AndEngine和libgdx这样的游戏引擎。我还开始学习OpenGL ES(我读过它为加载和显示位图提供了很好的工具),但是将其实现到游戏中将需要完全重制,而我现在对此并不感兴趣。