如何创建循环以通过 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);
}
}
我在舞台上有 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);
}
}