AS3使用文本文件中的路径加载图像

时间:2015-08-22 15:27:17

标签: actionscript-3 flash flash-cs6

我使用包含路径的txt文件。 加载txt文件并拆分为路径数组后 然后从数组路径加载img文件 但我在加载img时遇到错误

请帮帮我

示例代码:

var imglst:Array=new Array();
var lodimg:Loader=new Loader();
var lodtxt:URLLoader=new URLLoader();

lodtxt.load(new URLRequest("imglst.txt"));
lodtxt.addEventListener(Event.COMPLETE,onL_C);

function onL_C(e:Event)
{
	var t:Array=new Array();
	t=e.target.data.split(/\n/);
	var s:URLRequest=new URLRequest(t[0].toString());
	trace(t[0]);
	lodimg.load(s);
}

lodimg.contentLoaderInfo.addEventListener(Event.COMPLETE,onL_Cimg);


function onL_Cimg(e:Event)
{
	var i:Bitmap=new Bitmap();
	i=Bitmap(lodimg.content);
	i.width=100;
	i.height=100;
	addChild(i);
	trace("OK");
}

1 个答案:

答案 0 :(得分:0)

您是否从自己的其他网站加载图片?其他网站是否有 crossdomain.xml 以允许加载其内容的权限?通常Flash会给你一个“安全错误”作为一个事件,但是你的代码没有收听这样的事件,所以你的程序不知道任何这样的问题......看看谷歌如何处理AS3错误。

无论如何,解决方法是只使用URLloader加载文件的字节,完成后,您只需使用Loader将字节解码为像素颜色。

import flash.utils.ByteArray;

var imglst : Array;
var lodimg : Loader;
//var lodtxt : URLLoader = new URLLoader();

var lodURL:URLLoader = new URLLoader();
var img_bytes : ByteArray = new ByteArray();

lodURL.load(new URLRequest("http://yoursite/imglst.txt"));
lodURL.addEventListener(Event.COMPLETE,onL_C);

function onL_C (e:Event)
{
    //# Since load complete no need to keep listening for that
    lodURL.removeEventListener(Event.COMPLETE,onL_C);

    var t:Array=new Array();
    t=e.target.data.split(/\n/);
    var s:URLRequest=new URLRequest(t[0].toString());
    trace(t[0]);

    //lodimg.contentLoaderInfo.addEventListener(Event.COMPLETE,onL_Cimg);
    //lodimg.load(s);

    //# Now we know path so we load those file bytes
    lodURL.dataFormat = URLLoaderDataFormat.BINARY;
    lodURL.load(s); lodURL.addEventListener(Event.COMPLETE, onBytes_C);

}

function onBytes_C (e:Event)
{
    //# on complete load of bytes...
    trace("got bytes");
    img_bytes = lodURL.data; 
    //trace("Image bytes total : " + img_bytes.length);
    img_bytes.position = 0; //avoid "end of file" error

    lodimg = new Loader();
    lodimg.contentLoaderInfo.addEventListener(Event.COMPLETE,onL_Cimg);
    lodimg.loadBytes(img_bytes); //we already have data so this will be fast

}

function onL_Cimg (e:Event)
{
    var i:Bitmap = new Bitmap(); 
    i = lodimg.content as Bitmap;

    i.width=100;
    i.height=100;
    addChild(i);
    trace("OK");
}