Hi,
here’s an example of how to use a coroutine to update the preloader whilst loading a number of images across the network
[lua]display.setStatusBar( display.HiddenStatusBar )
– Load the relevant LuaSocket modules
local http = require(“socket.http”)
local ltn12 = require(“ltn12”)
local imgpath = “http://developer.anscamobile.com/sites/default/files/”
local imgs = {
“graphics-OV.png”,
“hardware-OV_1.png”,
“interface_overview.png”,
“media_OV.png”,
“network-OverView.png”,
“openfeint_OV.png”,
“physics_overview.png”,
“platform-specific_overview.png”
}
local preloaderScale = 0
local imagesLoaded=0
– setup preloader graphics
local preloader = display.newGroup()
local preloaderbg = display.newRect(50,20,100,10)
preloaderbg:setFillColor(100,0,0)
local preloaderfg = display.newRect(50,20,100,10)
preloaderfg:setFillColor(255,0,0)
preloaderfg:setReferencePoint(display.TopLeftReferencePoint)
preloader:insert(preloaderbg)
preloader:insert(preloaderfg)
preloader.x=60
preloader.y=220
– create co-routine
loader = coroutine.create(function()
repeat
– Create local file for saving data
local path = system.pathForFile( imgs[imagesLoaded+1], system.DocumentsDirectory )
myFile = io.open( path, “w+b” )
print("loading image: "…imgs[imagesLoaded+1])
– Request remote file and save data to local file
http.request{
url = imgpath…imgs[imagesLoaded+1],
sink = ltn12.sink.file(myFile),
}
– Display local file
–testImage = display.newImage(imgs[imagesLoaded+1],system.DocumentsDirectory,0,imagesLoaded*30);
imagesLoaded=imagesLoaded+1
print(“images loaded=”…imagesLoaded)
– pass control back to update function
coroutine.yield()
until(imagesLoaded>#imgs)
end
)
function init()
local testimage
– display the preloaded images
for i=1, #imgs, 1 do
testImage = display.newImage(imgs[i],system.DocumentsDirectory,50,25+(i-1)*50);
testImage.yScale=0.5
end
end
function loading(event)
– call the coroutine
coroutine.resume(loader)
preloaderScale = imagesLoaded * (1/#imgs)
if(preloaderScale >= 1) then
print("-- FINISHED --")
Runtime:removeEventListener(“enterFrame”,loading)
preloader:removeSelf()
init()
end
if(preloaderScale==0) then
preloaderfg.isVisible=false
else
preloaderfg.isVisible=true
preloaderfg.xScale = preloaderScale
end
end
Runtime:addEventListener(“enterFrame”, loading)[/lua] [import]uid: 6645 topic_id: 3636 reply_id: 303636[/import]