如何创建循环以通过 AS3 缓存图像?

How to create a loop for caching images by AS3?

我在舞台上有 100 个动画片段,名为 ads_box_1 ... ads_box_100.there 是每个 ads_box 中的另一个动画片段,名为 photo_box.I 想要缓存 100 个图像(1.jpg,2.jpg,...,100.jpg) 从服务器并将它们添加到每个 ads_box.photo_box.I 尝试一些循环来做到这一点,但他们没有t work.So 解决方案是什么?这是我的代码:

import org.sgmnt.lib.net.*;
import flash.net.URLRequest;
import flash.filesystem.File;
for (var i:Number=1; i<=5; i++)
{
    this["ads_box_" + i].photo_box.alpha = 0;
}
LocalCacheSettings.WORKING_DIRECTORY = File.applicationStorageDirectory;
//how to create a loop frome here...
var pic_loader:Loader;
NetClassFactory.initialize( LocalCacheLoader, LocalCacheURLLoader, LocalCacheNetStream );
pic_loader = NetClassFactory.createLoader();
pic_loader.contentLoaderInfo.addEventListener( Event.COMPLETE, _onComplete );
var pic_string:String = "http://localhost/Pics/" + String(1) + ".jpg";
pic_loader.load( new URLRequest(pic_string));
function _onComplete(e:Event):void
{
    var new_pic_mc:Sprite= new Sprite();
    new_pic_mc.addChild(pic_loader);
    new_pic_mc.width = new_pic_mc.height = 90;
    this["ads_box_" + 1].photo_box.addChild(new_pic_mc);
    this["ads_box_" + 1].photo_box.alpha = 1;
}
//to here

做这样的事情,注意这只是在顺序循环中加载图像。您还应该添加事件侦听器以进行错误处理。您必须在此基础上编写缓存逻辑:

import org.sgmnt.lib.net.*;
import flash.net.URLRequest;
import flash.filesystem.File;
for (var i:Number=1; i<=5; i++)
{
    this["ads_box_" + i].photo_box.alpha = 0;
}
LocalCacheSettings.WORKING_DIRECTORY = File.applicationStorageDirectory;
//how to create a loop frome here...
var pic_loader:Loader;
NetClassFactory.initialize( LocalCacheLoader, LocalCacheURLLoader, LocalCacheNetStream );
pic_loader = NetClassFactory.createLoader();
pic_loader.contentLoaderInfo.addEventListener( Event.COMPLETE, _onComplete );
var currentImageCount:uint = 1;
//load the first image
loadImage();

function loadImage():void
{
    var pic_string:String = "http://localhost/Pics/" + String(currentImageCount) + ".jpg";
    pic_loader.load( new URLRequest(pic_string));
}

function _onComplete(e:Event):void
{
    var new_pic_mc:Sprite= new Sprite();
    new_pic_mc.addChild(pic_loader);
    new_pic_mc.width = new_pic_mc.height = 90;
    this["ads_box_" + currentImageCount].photo_box.addChild(new_pic_mc);
    this["ads_box_" + currentImageCount].photo_box.alpha = 1;
    //WRITE YOUR CACHING LOGIC HERE FOR EACH LOADED IMAGE
    if (currentImageCount <= 100)
    {
        currentImageCount++;
        loadImage();
    }
    else
    {
        pic_loader.contentLoaderInfo.removeEventListener( Event.COMPLETE, _onComplete);
    }
}

希望这能回答您的问题。

最后这段代码运行良好,感谢@Gurtej Singh

import org.sgmnt.lib.net.*;
import flash.net.URLRequest;
import flash.filesystem.File;
for (var i:Number=1; i<=5; i++)
{
    this["ads_box_" + i].photo_box.alpha = 0;
}
LocalCacheSettings.WORKING_DIRECTORY = File.applicationStorageDirectory;
var currentImageCount:uint = 1;
var pic_loader:Loader;
loadImage();
function loadImage():void
{
    NetClassFactory.initialize( LocalCacheLoader, LocalCacheURLLoader, LocalCacheNetStream );
    pic_loader = NetClassFactory.createLoader();
    pic_loader.contentLoaderInfo.addEventListener( Event.COMPLETE, _onComplete );
    var pic_string:String = "http://localhost/Pics/" + String(currentImageCount) + ".jpg";
    pic_loader.load( new URLRequest(pic_string));
}

function _onComplete(e:Event):void
{
    var new_pic_mc:Sprite= new Sprite();
    new_pic_mc.addChild(pic_loader);
    new_pic_mc.width = new_pic_mc.height = 90;
    this["ads_box_" + currentImageCount].photo_box.addChild(new_pic_mc);
    this["ads_box_" + currentImageCount].photo_box.alpha = 1;
    pic_loader.contentLoaderInfo.removeEventListener( Event.COMPLETE, _onComplete );
    if (currentImageCount < 5)
    {
        currentImageCount++;
        loadImage();
    }
    else
    {
        pic_loader.contentLoaderInfo.removeEventListener( Event.COMPLETE, _onComplete);
    }
}