Actionscript 3 简单字节加载程序获取运行时错误(错误#1010:术语未定义且没有属性。)
我正在创建一个简单的程序,它需要跟踪bytesLoaded和ByTestTotal。看起来一切正常,但我遇到了以下运行时错误:错误#1010:术语未定义且没有属性。这是我的as3.0类代码:Actionscript 3 简单字节加载程序获取运行时错误(错误#1010:术语未定义且没有属性。),actionscript-3,flash,apache-flex,actionscript,Actionscript 3,Flash,Apache Flex,Actionscript,我正在创建一个简单的程序,它需要跟踪bytesLoaded和ByTestTotal。看起来一切正常,但我遇到了以下运行时错误:错误#1010:术语未定义且没有属性。这是我的as3.0类代码: package { import flash.display.*; import flash.text.TextField; import flash.events.Event; public class shoolWork3 extends MovieClip { public
package {
import flash.display.*;
import flash.text.TextField;
import flash.events.Event;
public class shoolWork3 extends MovieClip {
public function shooWork3():void {
addEventListener(Event.ENTER_FRAME, loadProgress);
function loadProgress(event:Event) {
// get bytes loaded and bytes total
var movieBytesLoaded:int = this.root.loaderInfo.bytesLoaded;
var movieBytesTotal:int = this.root.loaderInfo.bytesTotal;
//Convert to kilobytes
var gameKilobytesLoaded:int = gameBytesLoaded / 1024;
var gameKilobytesTotal:int = gameBytesTotal / 1024;
}
}
}
}
在函数中,
此
引用的是全局
对象范围,而不是类,并且在全局
对象上没有根
属性,因此出现错误。如果要访问类的属性,则必须删除this
关键字
var movieBytesLoaded:int = root.loaderInfo.bytesLoaded;
...
此外,您的变量被称为
moviebytesload
和movieBytesTotal
,但您试图访问gamebytesload
和gameBytesTotal
,这也不起作用。捕捉得好!值得注意的是,之所以发生这种情况,是因为OP在其构造函数方法中定义了事件处理函数loadProgress()
。请注意,如果在调试器中运行此代码,您将看到this
引用AS3的“全局”对象。它不同于Javascript,我假设这个
将引用函数。另一个使此代码起作用的解决方案是将loadProgress()
声明为SchoolWork3
类的方法。这样做可能更可取:这是AS3中的常见模式,可以使以后很容易删除事件侦听器。对不起,我的错,它甚至与JavaScript中的情况不同:)实际上,在JavaScript中,OPs代码可以工作,this
将引用窗口
对象,但在尝试访问该对象上的引用属性之前,它将检查当前函数范围,然后检查父函数范围。我会更正我的答案。