local SpriteLoaderPool = {} local SpriteLoader = {} -- 调用此方法创建一个管理器 function SpriteLoader.New() -- -- 判断对象池里有没有 -- if #SpriteLoaderPool > 0 then -- return table.remove(SpriteLoaderPool, 1) -- end -- 没有新建 local o = {} o.SpriteList = {} SpriteLoader.__index = SpriteLoader setmetatable(o, SpriteLoader) return o end function SpriteLoader:LoadSprite(name) local transName = GetTranslateSpriteName(name) local sp = resMgr:LoadSpriteAsset(name) if sp then if not self.SpriteList[sp.name] then self.SpriteList[sp.name] = 0 end -- 每次加载会导致引用计数加2 self.SpriteList[sp.name] = self.SpriteList[sp.name] + 1 return sp end end -- 根据界面加载的数量卸载相应数量的资源 function SpriteLoader:UnLoadSprite() for name, count in pairs(self.SpriteList) do LogWarn("lua 回收资源:name:"..name..", count:"..count) resMgr:UnLoadAsset(name, count) end self.SpriteList = {} -- 回收到对象池 table.insert(SpriteLoaderPool, self) end -- 销毁loader function SpriteLoader:Destroy() self:UnLoadSprite() end return SpriteLoader