我是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()
由于我在本教程系列中学到的东西之外没有任何经验,所以我不知道如何解决这个问题。
答案 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_mc
,
preloader_mc.percent_txt
,
preloader_mc.ofBytes_txt
,
preloader_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.
}
希望这能指出你正确的方向。 :)