quick 3.3 "异步"加载Spine方案.md

本文介绍了在使用Quick 3.3时,面对Spine骨骼动画异步加载和缓存的挑战。通过在进入主战斗场景前预加载并缓存资源来避免游戏卡顿,提出了自定义异步加载回调和简易Spine缓存方案。同时,讨论了如何将`createWithData`方法导出到Lua层以提高加载速度。
摘要由CSDN通过智能技术生成
背景

项目中, 使用了quick 3.3, 由于Spine各个功能相当强大, 所以使用了Spine作为骨骼动画, 但是Spine并非cocos官方支持,因此在一些问题上支持性不是那么好,其中如何异步加载Spine就是一个问题。

比如游戏中经常遇到这么一个问题:在主战斗场景中, 需要加载大量的图片、声音、Spine动画等, 如果我们等用到的时候再去加载,由于文件I/O是比较耗时的, 有可能就会在游戏过程中造成卡顿的现象,在低端配置手机中体现尤为明显,这或大或小造成游戏体验不佳。

对于这个问题呢, 一种比较常用的解决方案:在进入主战斗之前, 先预加载战斗中大量耗时的资源(并不一定要是所有资源),并且缓存起来,等到真到需要用到的时候,直接去读取缓存中的数据。

比如很多游戏看到的Loading条, 就是用的这种方案。

难点

1、异步加载
cocos本身已经支持了一些资源的异步加载回调, 使用多线程做的,每加载完一个资源,都可以有异步回调作相应的处理(比如显示加载进度)。但是 对于一些cocos官方不支持的资源,比如Spine等,就需要自己实现异步加载回调。

自己实现我知道有两种方法。
一种就是和cocos官方的一样, 也用多线程做, 这个没什么好说的。
一种就是叫做”同步异步化“,开启一个每帧都update函数,在update()里加载一次资源,用同步的方式实现异步加载资源,这种方法叫做:”同步异步化”。
在Lua中还有另一种方法可以实现,就是用Lua的协程,更加的方便。

我自己使用的是使用的update这种方法。

 function LoadingLayer:update(ts)   -  --- 每帧加载一次资源
    local pngNum = table.nums(ResMng._pngList)
    local plistNum = table.nums(ResMng._plistList)
    local soundNum = table.nums(ResMng._soundList)
    local spineNum = table.nums(ResMng._spineList)
    local curLoadNum = ResMng._curLoadNum

    -- 加载资源顺序
    -- 1、加载PNG
    if 0 <= curLoadNum and curLoadNum < pngNum then
        ResMng.
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值