ImageLoad = {} local imgAssetMap = {} local imgQueue = Queue.new(2000) local function DownLoadImg(url) local www = UnityEngine.WWW(url) coroutine.www(www) if string.utf8len(www.error) == 0 then local obj = imgAssetMap[url] if obj and not obj.load then local texture = www.texture www:Dispose() if (texture ~= null) then local ntexture = FairyGUI.NTexture(texture) obj.ntexture = ntexture obj.load = true obj.co = nil end end end end local function SetTexture() if (imgQueue:Count() > 0) then local tem = imgQueue:Dequeue() local obj = imgAssetMap[tem.url] if not tem._iconObject.isDisposed and obj then if obj.load then tem._iconObject.texture = obj.ntexture if tem.callback then tem.callback() end else imgQueue:Enqueue(tem) end end end end UpdateBeat:Add(SetTexture) -- group 图片分组 function ImageLoad.Load(url,_iconObject,group,callback) if string.utf8len(url) == 0 then return end if not group then group = "common" end local asset = imgAssetMap[url] if (asset ~= nil) then if asset.load then _iconObject.texture = asset.ntexture if callback then callback() end else imgQueue:Enqueue({url = url,_iconObject = _iconObject,callback = callback}) end return end local _co = coroutine.start(DownLoadImg,url) -- local _co_load = coroutine.start(SetTexture,_iconObject,url,callback) imgAssetMap[url] = {group = group,load=false,co = _co} imgQueue:Enqueue({url = url,_iconObject = _iconObject,callback = callback}) end function ImageLoad.Clear(group) for i,v in pairs(imgAssetMap) do if v.group == group then if v.co then coroutine.stop(v.co) end -- if v.co_load then -- coroutine.stop(v.co_load) -- end if v.load then imgAssetMap[i].ntexture:Unload(true) end imgAssetMap[i] = nil end end end