我有以下两个类:
package
{
import flash.display.Sprite;
import flash.events.Event;
public class Main extends Sprite
{
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
var test:NewClass = new NewClass();
}
}
}
Run Code Online (Sandbox Code Playgroud)
和
package
{
import flash.display.Sprite;
public class NewClass extends Sprite
{
public function NewClass()
{
trace(stage.width);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
TypeError:错误#1009:无法访问空对象引用的属性或方法.在NewClass()[C:\ Documents and Settings\Roma\poo\src\NewClass.as:10]在Main/init()[C:\ Documents and Settings\Roma\poo\src\Main.as:23]在Main()[C:\ Documents and Settings\Roma\poo\src\Main.as:15]
为什么???
是的,flash开发用户......:D
嗯,原因是:舞台只适用于显示列表上的对象 ......
修改你的类如下:
package {
import flash.display.Sprite;
import flash.events.Event;
public class NewClass extends Sprite {
public function NewClass():void {
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
trace(stage.width);//you may want to use stage.stageWidth actually
}
}
}
Run Code Online (Sandbox Code Playgroud)
和Main :: init如下:
private function init(e:Event = null):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
var test:NewClass = new NewClass();
this.addChild(test);
}
Run Code Online (Sandbox Code Playgroud)
哦,你可以改变你Coding Style Type从BraceAfterLine到BraceOnLine中Tools > Program Settings > FlashDevelop > Indenting,以防万一你倾向于...;)
编辑:
如果你想访问舞台,在a的范围内DisplayObject,你需要确定,舞台是可用的...如果你想尽快访问舞台,那么你需要提供的技巧...但是如果您在点击处理程序中访问舞台,例如,这会自动暗示DisplayObject显示列表中的... ...无法单击它...
但是请注意:我不认为,从任何地方访问舞台都特别聪明......当涉及到显示时,你的应用层次结构应该遵循显示列表层次结构,即访问从根目录到分支,以及不是反过来......这对于实现可重用性很重要......
格尔茨
back2dos