display.loadRemoteImage( "http://developer.anscamobile.com/demo/hello.png", "GET", networkListener, "helloCopy.png", system.TemporaryDirectory, 50, 50 )とURLとは別に画像ファイル名が指定されていた。もしやと思いざっと解説を確認してみたところ、どうやらサーバにある画像を読み込んで表示するだけではなく、保存もされるらしい。わずか一行で画像のDLと保存が可能だと!これは試しておかねばと思い立ったw
せっかくなので、複数ファイルを扱います。サンプルではコード内に画像のファイル名を書いていますが、実際に使う場合は画像のリストをWebから取ってきたり、DBからもらってきたりすると思います。まぁ、そういったコードはそれぞれの仕様にあわせて実装してくださいw
あと、画像がダウンロード済みかどうかの判定も必要ですね。
local _W, _H = display.contentWidth, display.contentHeight local server = "http://example.com/img/" local count = 0 local imgList = { {name = "01.jpg"}, {name = "02.jpg"}, {name = "03.jpg"}, {name = "04.jpg"}, {name = "05.jpg"}, {name = "06.jpg"} } local networkListener = function(event) if event.isError then print("NETWORK ERROR: Download Failed.") else display.remove(event.target) --(2) event.target = nil count = count + 1 end print("RESPONSE: "..event.response) if count == #imgList then --(3) local img = display.newImage(imgList[1].name, system.DocumentsDirectory) img.x = _W/2 img.y = _H/2 end end for i = 1, #imgList do display.loadRemoteImage(server..imgList[i].name, "GET", networkListener, imgList[i].name, system.DocumentsDirectory) --(1) i = i + 1 end(1)順番にdisplay.loadRemoteImage()を読んで画像をダウンロード
(2)リスナーとしてnetworkListener()が呼ばれますが、そのままだと画像が表示されてしまうので、
display.remove(event.target)
event.target = nil
でリムーブします
(3)確認のため、全画像がダウンロードされたら1枚目の画像を表示を表示させてます
思いつきでやってみましたので、この方法が良いのかどうかわかりません。
ですが多分何かの役にたってくれそうな気がします。
最近Daily Buildで実装されたLuaFileSystem(LFS)と組み合わせるといいのかなぁ?