[ create a new paste ] login | about

Link: http://codepad.org/ydr3m4bK    [ raw code | fork ]

Lua, pasted on Jan 27:
--图片异步加载
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


Create a new paste based on this one


Comments: