0

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

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()

而且由于除了从本教程系列中学到的东西之外,我真的没有任何经验,所以我不知道该怎么做才能解决这个问题。

4

2 回答 2

0

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

获得行号后,您应该会看到该行上的某些内容为空或未定义。该错误表示它发生在 functionloaderF()中,并且查看该代码,唯一可能发生此类错误的地方是 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_mc, preloader_mc.percent_txt, preloader_mc.ofBytes_txt, preloader_mc.totalBytes_txt

也许您的预加载器影片剪辑缺少这些对象之一...

于 2012-05-23T19:13:01.327 回答
0

首先,您需要打开在(File > Publish Settings > Flash (.swf) > Permit Debugging). 这将提供行号并允许进行额外的调试以帮助追踪错误。

其次,在您提供的代码示例中,您没有声明加载程序,因此当您调用时loaderInfo,flash 抱怨“一个术语未定义”是有道理的。尽管从技术上讲,loaderInfo 对象是事件对象的子对象。因此,假设您将事件侦听器添加到加载器对象,loaderInfo.bytesTotal将变为e.loaderInfo.bytesTotal;目前您的已添加到时间线中。

为 Adob​​e 的Actionscript 3.0 参考添加书签。用它。当您开始您的 Flash 之旅时,这将是您学习 AS3 不可或缺的手册。具体来说,您需要参考Loader 类

以下是您的代码中可能缺少的内容:

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

loaderF在屏幕的每一帧更新期间(可能每 0.034 秒)都会调用您的函数。你可能会更高兴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.
}

希望这会为您指明正确的方向。:)

于 2012-05-23T20:20:48.063 回答