Actionscript 3 自定义类中的ActionScript 3.0阶段宽度
如何访问Costum类中的阶段类属性 类别:Actionscript 3 自定义类中的ActionScript 3.0阶段宽度,actionscript-3,actionscript,stage,Actionscript 3,Actionscript,Stage,如何访问Costum类中的阶段类属性 类别: package { import Main; import flash.events.*; import flash.display.Sprite; import flash.display.Stage; public class Run extends Sprite { var obj:a1_spr; public function Run() {
package {
import Main;
import flash.events.*;
import flash.display.Sprite;
import flash.display.Stage;
public class Run extends Sprite {
var obj:a1_spr;
public function Run() {
runAssets();
}
private function runAssets():void {
obj = new a1_spr()
addChild(obj);
obj.x = stage.stageWidth/2;
}
}
}
TypeError: Error #1009: Cannot access a property or method of a null object reference.
输出:
package {
import Main;
import flash.events.*;
import flash.display.Sprite;
import flash.display.Stage;
public class Run extends Sprite {
var obj:a1_spr;
public function Run() {
runAssets();
}
private function runAssets():void {
obj = new a1_spr()
addChild(obj);
obj.x = stage.stageWidth/2;
}
}
}
TypeError: Error #1009: Cannot access a property or method of a null object reference.
您将无法访问构造函数中的stage(除非将stage注入到类中)。Sprite具有阶段属性
您将无法访问构造函数中的stage(除非将stage注入到类中)。Sprite有一个stage属性。要扩展Joel所说的内容,并将其放到上下文中: 每个显示对象都有一个.stage属性,但在将显示对象添加到显示列表之前,该属性为空。因此,在构建过程中,您将永远无法访问它(因为它会在之后添加) 将对象添加到阶段时,添加到阶段的事件将被触发,但您知道.STAGE属性现在已填充。之后,您可以从对象中的任何位置访问该阶段
希望这能为您澄清一些事情。要进一步阐述Joel所说的内容,并将其置于上下文中: 每个显示对象都有一个.stage属性,但在将显示对象添加到显示列表之前,该属性为空。因此,在构建过程中,您将永远无法访问它(因为它会在之后添加) 将对象添加到阶段时,添加到阶段的事件将被触发,但您知道.STAGE属性现在已填充。之后,您可以从对象中的任何位置访问该阶段
希望这能为您澄清问题。当flash用您的.as文件编译fla资产时,没有任何阶段。因此,代码是作为documentclass的准备而启动的,您必须倾听是否有一个阶段,以便能够呈现它 这就是为什么要听ADDED_to_STAGE,检查它是否在显示列表中 所有显示对象都会出现此问题,因为当存在实际阶段时,必须将其添加到显示列表中
习惯于添加该侦听器,并检查是否有阶段。特别是在团队中工作时,以及在大型项目中执行自己的组件时。当flash使用.as文件编译fla资产时,没有阶段。因此,代码是作为documentclass的准备而启动的,您必须倾听是否有一个阶段,以便能够呈现它 这就是为什么要听ADDED_to_STAGE,检查它是否在显示列表中 所有显示对象都会出现此问题,因为当存在实际阶段时,必须将其添加到显示列表中
习惯于添加该侦听器,并检查是否有阶段。特别是在团队中工作时,以及在大型项目中完成自己的组件时。。它起作用了。但我不确定我是否理解为什么。您能解释一下为什么我必须使用listener运行它吗?在将所有DisplayObjects添加到显示列表之前,它们的stage属性都为null,因此在尝试访问它之前,您需要确保该对象在其中;)当您使用var myObject:myObject=new myObject()实例化对象时,构造函数会立即运行,包括在构造函数内部调用的任何方法。即使新MyObject后面的下一行是addChild(MyObject),MyObject也不会出现在舞台上,或引用舞台。您还可以使stage:stage成为MyObject的构造函数参数,这样新的MyObject(this.stage)就可以立即访问应用程序的stage.Tank。它起作用了。但我不确定我是否理解为什么。您能解释一下为什么我必须使用listener运行它吗?在将所有DisplayObjects添加到显示列表之前,它们的stage属性都为null,因此在尝试访问它之前,您需要确保该对象在其中;)当您使用var myObject:myObject=new myObject()实例化对象时,构造函数会立即运行,包括在构造函数内部调用的任何方法。即使新MyObject后面的下一行是addChild(MyObject),MyObject也不会出现在舞台上,或引用舞台。您还可以使stage:stage成为MyObject的构造函数参数,这样新的MyObject(this.stage)就可以立即访问应用程序的stage。