Flash As3 Loader问题

时间:2010-10-18 08:16:20

标签: actionscript-3 loader

嗨我试图在As3中加载一些外部jpeg。 它在Flash中本地工作正常,但它不能在我的服务器上工作。 我的应用也会同时加载YouTube视频。

function drawResult(index,videoID,song_title,thumbnail:String=null)
{
    var theClip:resultRowClip=new resultRowClip ();
    _clip.addChild(theClip);
    myArray[index] = new Array(videoID,theClip);
    theClip.y=0+(43*(index-1));
    theClip.rowText.text = song_title;
    theClip.rowBack.visible = false;
    if (thumbnail != ""){
        theClip.tHolder.visible=true;
        loadImage(thumbnail,index);
    }
}

function loadImage(url:String,index):void
{
    //this.myClip.myText.text += "load image";
    // Set properties on my Loader object
    var imageLoader:Loader = new Loader();
    imageLoader.load(new URLRequest(url));
    imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, function (evt:Event){imageLoaded(evt,index)});
}

function imageLoaded(evt,id):void
{
    //this.myClip.myText.text += "id : evt : " + evt.status;
    // Load Image
    var image:Bitmap = new Bitmap(evt.target.content.bitmapData);
    myArray[id][1].tHolder.addChild(image);
    myArray[id][1].tHolder.width=myArray[id][1].tHolder.width*0.35;
    myArray[id][1].tHolder.height=myArray[id][1].tHolder.height*0.35;
}

有谁知道问题是什么?

**我从io Error中添加了两个Evenet监听器:

imageLoader.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);
imageLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);

这是处理错误的功能:

private function ioErrorHandler(event:IOErrorEvent):void {
    this.myClip.myText.text +=("ioErrorHandler: " + event);
}

无论如何,我没有错误......

我还尝试在imageLoader.load之前移动监听器,但它仍然是相同的...没有错误,也没有加载数据..

我将代码更改为patrikS建议:

function loadImage(url:String,index):void
        {   

            //this.myClip.myText.text += "load image";
            // Set properties on my Loader object
            //if (index != 1) return;
            var imageLoader:Loader = new Loader();
            imageLoader.name = index.toString();

            //myArray[index][1].addChild(imageLoader);
            //imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, function (evt:Event){imageLoaded(evt,index)});
            imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler);     
            imageLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);
            imageLoader.load(new URLRequest(url));


        }

我当前的completeHandler函数(tnx patrikS):

private function completeHandler(evt:Event):void{
            //this.myClip.myText.text += "id : evt : " + evt.status;
            // Load Image
            trace("evt target loader name : "+ evt.target.loader.name );
            evt.target.removeEventListener(Event.COMPLETE, completeHandler );
            var image:Bitmap = new Bitmap(evt.target.content.bitmapData);
            myArray[evt.target.loader.name][1].tHolder.addChild(image);
            myArray[evt.target.loader.name][1].tHolder.width=myArray[evt.target.loader.name][1].tHolder.width*0.35;
            myArray[evt.target.loader.name][1].tHolder.height=myArray[evt.target.loader.name][1].tHolder.height*0.35;
            //trace (hadar.y + "Y / X" + hadar.x);
        }

它仍然只适用于Flash IDE,并且可以在任何浏览器上运行......

3 个答案:

答案 0 :(得分:1)

尝试urlstream并检查crossdomain.xml:)

    urlstream = new URLStream();
    urlstream.addEventListener(Event.COMPLETE, onLoad);
    urlstream.addEventListener(IOErrorEvent.IO_ERROR, onErr);
    urlstream.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onErr);
    urlstream.load(req);
       private function onLoad(e:Event):void {
            var ba:ByteArray = new ByteArray();
            urlstream.readBytes(ba, 0, urlstream.bytesAvailable);
            _loader.contentLoaderInfo.addEventListener(Event.INIT, onBytesLoad);
            _loader.loadBytes(ba);
        }

答案 1 :(得分:0)

应在调用load()方法之前添加监听器。 使用完整事件监听器的闭包并没有真正的优势。想想要删除事件监听器!

function loadImage(url:String, index:int):void
{
    //this.myClip.myText.text += "load image";

    // Set properties on my Loader object
    var imageLoader:Loader = new Loader();
    imageLoader.name = index.toString();

    //make sure you to add your listeners here!
    imageLoader.contentLoaderInfo.addEventListener(
                     IOErrorEvent.IO_ERROR,ioErrorHandler);

    imageLoader.contentLoaderInfo.addEventListener(
                     Event.COMPLETE, completeHandler );

    imageLoader.load(new URLRequest(url));

}

function completeHandler(event:Event ):void
{
    //imageLoaded(evt,index);
    trace( event.target.loader.name );
    event.target.removeEventListener(Event.COMPLETE, completeHandler );
}

答案 2 :(得分:0)

在调试模型中,您可以从任何可用站点加载文件,但是可以发布模型。 可能是这个帮助:http://www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html