ActionScript 3.0错误#1010 - 预加载器功能

时间:2012-05-23 17:56:45

标签: actionscript-3

我是Flash和ActionScript的新手。我正在尝试按video tutorial制作一个预加载器,我遇到的问题是视频似乎无法解决。我相信我已经从视频中正确输入了所有代码。就是这样:

stop();

addEventListener(Event.ENTER_FRAME, loaderF);

function loaderF(e:Event):void{
    var toLoad:Number = loaderInfo.bytesTotal;
    var loaded:Number = loaderInfo.bytesLoaded;
    var total:Number = loaded/toLoad;
    if( loaded == toLoad ){
        removeEventListener(Event.ENTER_FRAME, loaderF);
        gotoAndStop(2);
    } else {
        preloader_mc.preloaderFill_mc.scaleX = total;
        preloader_mc.percent_txt.text = Math.floor( total * 100 ) + "%";
        preloader_mc.ofBytes_txt.text = loaded + "bytes";
        preloader_mc.totalBytes_txt.text = toLoad + "bytes";
    }
}

我输入的内容不会产生编译错误,但输出告诉我:

TypeError: Error #1010: A term is undefined and has no properties.
at preloader_fla::MainTimeline/loaderF()

由于我在本教程系列中学到的东西之外没有任何经验,所以我不知道如何解决这个问题。

2 个答案:

答案 0 :(得分:0)

我不使用Flash CS5,但是我应该能够通过按CTRL + SHIFT + ENTER执行SWF来获取错误发生位置的#行。

获得行号后,您应该看到该行上的某些内容为null或未定义。该错误表明它出现在函数loaderF()中,并且查看该代码,唯一可能发生错误的地方是在else块中:

} else {
        preloader_mc.preloaderFill_mc.scaleX = total;
        preloader_mc.percent_txt.text = Math.floor( total * 100 ) + "%";
        preloader_mc.ofBytes_txt.text = loaded + "bytes";
        preloader_mc.totalBytes_txt.text = toLoad + "bytes";
    }

在上面的代码块中,没有定义其中一个: preloader_mc.preloaderFill_mcpreloader_mc.percent_txtpreloader_mc.ofBytes_txtpreloader_mc.totalBytes_txt

也许您的预加载器影片剪辑缺少其中一个对象......

答案 1 :(得分:0)

首先,您需要启用(File > Publish Settings > Flash (.swf) > Permit Debugging)下的调试功能。这将提供行号并允许其他调试以帮助追踪错误。

其次,在你提供的代码示例中,你还没有声明加载器,所以当你调用loaderInfo时,flash就会抱怨“一个术语未定义”。虽然从技术上讲,loaderInfo对象是事件对象的子对象。因此,假设您将事件侦听器添加到loader对象,loaderInfo.bytesTotal将成为e.loaderInfo.bytesTotal;目前您的已添加到时间线。

为Adobe Actionscript 3.0 Reference添加书签。用它。当您开始使用Flash时,这将是您讲AS3时不可或缺的手册。具体来说,您需要参考Loader class

以下是您在代码中可能遗漏的内容:

var myLoader:Loader = new Loader();
myLoader.load(new URLRequest("path/to/my/file"));

在屏幕的每个帧更新期间(可能每隔.034秒)调用您的函数loaderF。您可能会对ProgressEvent.PROGRESS而不是Event.ENTER_FRAME感到满意。如果是这样,你也想要抓住完整的事件,看起来像这样:

myLoader.addEventListener(Event.COMPLETE, loadComplete);
myLoader.addEventListener(ProgressEvent.PROGRESS, loadProgress);

function loadComplete(e:Event):void {
    // Stuff to do when the file finishes loading.
}

function loadProgress(e:Event):void {
    var current:int = e.bytesLoaded;
    var total:int = e.bytesTotal;
    var percent:Number = current/total;

    // Update the readout of your loading progress.
}

希望这能指出你正确的方向。 :)