--图片异步加载
ImageAsync=class("ImageAsync",function()
return cc.Layer:create()
end)
ImageAsync.ctor=function(self)
self.size=cc.Director:getInstance():getWinSize()
self:initTexture()
self:loadingLabel()
self.curIndex=0 --当前loaded的图片编号
self:registerScriptHandler(function(tag)
if tag=="enter" then
--设置定时器
self:scheduleUpdateWithPriorityLua(function(dt)
self:loadTexture()
end,0)
elseif tag=="exit" then
cclog("exit")
self:unscheduleUpdate()
cc.Director:getInstance():getTextureCache():removeAllTextures()
end
end)
end
--初始化loadding label
ImageAsync.loadingLabel=function(self)
local label=cc.Label:createWithTTF("Loading...0%", "res/fonts/arial.ttf", 32)
label:setPosition(self.size.width/2,self.size.height/4)
self:addChild(label)
self.label=label
end
--初始化图片集
ImageAsync.initTexture=function(self)
self.textures={}
for i=0,7 do
for j=0,7 do
local image=string.format("Images/sprites_test/sprite-%d-%d.png",i,j)
table.insert(self.textures,image)
end
end
end
--异步加载图片
ImageAsync.loadTexture=function(self)
local function loadedImage(texture)
local sprite=cc.Sprite:createWithTexture(texture)
sprite:setPosition(cc.p(self.size.width/2,self.size.height/2))
sprite:setScale(2)
self:addChild(sprite)
self.curIndex=self.curIndex+1
self.label:setString(string.format("Loading...%d%%",math.floor(100*self.curIndex/#self.textures)))
cclog(string.format("loaded self.textures[%d]:%s",self.curIndex,self.textures[self.curIndex]))
end
local textureCache=cc.Director:getInstance():getTextureCache()
for i=1,#self.textures do
textureCache:addImageAsync(self.textures[i],loadedImage)
end
self:unscheduleUpdate()
end
ImageAsync.create=function()
local layer=ImageAsync.new()
return layer
end
return ImageAsync