spine性能优化篇

来源:互联网 发布:网络存储一体机系统 编辑:程序博客网 时间:2024/06/15 20:07

Spine是一款优秀的2D骨骼动画软件,提供了几乎包含目前所有主流游戏引擎和编程语言的运行库。

本人使用cocos2d引擎开发移动游戏,鉴于Spine强大的功能和良好的UI,选择其实现骨骼动画。

 

具体使用过程中,发现如下两个需求:

1. Spine的绘制效率不高,每次增加一个Spine动画,会增加1Draw call

2. Spine文件读取效率不高,特别是大文件的动画,在低端机上,每次加载会卡顿。

 

解决方法如下:

1. 减少Draw Call。具体做法是增加Spine纹理的Batchcocos2d-x自带的spine版本太低,不带batch功能。spine官方库2.0版本之后,已经实现batch功能。直接更新库即可,不再多述。

 

2. 提高读取效率。具体做法是增加文件缓存。第一次初始化时,从硬盘读取文件的数据,并加入到缓存池中;之后的每次初始化,直接调用缓存池中缓存,缓存的引用计数加一;析构时,不会自动释放缓存,缓存的引用计数减一。缓存池中的缓存,需要手动释放。

具体分为纹理缓存和数据缓存。

 

纹理缓存。Spine纹理的管理,直接调用cocos2dTextureCachespine初始化时会时,若纹理缓存池中没有图片,会加载图片;若存在,则直接使用纹理,引用计数加1spine析构时,若纹理的引用计数为0,则从纹理缓存池中释放图片,否则引用计数减1。按我们的需求,在spine析构时不自动释放纹理,而是纳入我们的缓存管理机制。

 

文件缓存。在spine初始化时,会从硬盘读取文件数据。在析构时,将文件数据删除。每个spine单独拥有一份文件数据。按我们的需求,我们希望不同spine可以共用一份数据,并纳入我们的缓存管理机制。

 

 

以上为原创文章,如转载请表明出处@yangli.network@gmail.com

0 0