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)と組み合わせるといいのかなぁ?
