【游戏开发实战】【UI框架】【处理界面上图片异步加载导致的突兀变化】

4 篇文章 0 订阅
1 篇文章 0 订阅
本文探讨了在UI界面中,由于异步加载英雄头像导致的图片瞬间变换问题,提出了预加载策略。通过在Panel创建时预先加载所有必要的资源,并将加载的图片缓存到表格中,确保在初始化界面时能直接使用正确的头像,从而避免用户体验的下降。实现方式包括在Prefab加载完成后,再调用Init方法显示Panel并处理业务逻辑。
摘要由CSDN通过智能技术生成

问题场景

有个UIPanelA,里面有个英雄列表,每个英雄头像是异步加载出来,接口形如

game.resMgr:LoadAsync(imgAssetPath, function(imgAsset){

        heroIcon.texture = imgAsset

})

界面打开后执行加载会导致一个问题,原来的默认图片不是当前英雄头像,会突然变成对应的英雄头像。

如果换成空的头像,美术会说,忽然变掉了,体验不好。

所以需要处理异步图片加载导致的这个图片突然变化的问题。

现有情况分析

项目里的Panel的Prefab资源加载也是使用的异步加载方式。

当Prefab加载后,资源加载对象会调用传入的回调方法,在回调方法里会调用Panel对象Init方法显示出Panel,在这里会处理业务逻辑,再去异步加载英雄头像。所以会导致图片忽然切换了。

处理方案

打开界面时提前处理业务,进行资源的预加载操作。这些资源加载也计入Panel资源的加载,当Panel的Prefab,Icon都加载完毕才调用Init方法显示Panel和处理业务逻辑。Icon资源在加载的后缓存到一个table里面,下次可直接取用,关闭Panel的时候可以做自动释放。

伪代码如下,loader和回调方法需要自行实现,这里就讲个思路 |^o^|

class Panel

        function onCreate()

                local iconCallback = function(assetPath, iconAsset)

                        resMap[assetPath] = iconAsset

                end

                loader:loadAsset(assetPath1, iconCallback)

                loader:loadAsset(assetPath2, iconCallback)

                loader:loadAsset(assetPath3, iconCallback)

                ...

                loader:addOnCompleteCallback(completeCallback{

                        Init()

                })

        function Init()

                loadImg(image1, assetPath1)

                loadImg(image2, assetPath2)

                loadImg(image3, assetPath3)

        end

        function loadImg(image, assetPath)

                if resMap[assetPath] then

                        image.sprite = resMap[assetPath]

                else

                        loader:loadAsync(assetPath, function(asset)

                                resMap[assetPath] = asset

                                image.sprite = asset

                        end)

                end

        end

                

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值