访问舞台属性

时间:2014-03-12 06:40:17

标签: actionscript-3

对!@#%小时进行故障排除后,我注意到我无法在类的构造函数中访问stage的属性。例如,给定一个DisplayObject子类,它不起作用:

Constructor() {
    this.width = stage.stageWidth;
}

这里的主要问题是该对象尚未被添加到舞台中 - 正如我所理解的那样:因为它并不知道"它所在的位置"它无法确定舞台宽度。在这种情况下,通过调用this.width = stage.stageWidth来响应ADDED_TO_STAGE事件

,可以轻松解决问题

此方法在处理从未添加到舞台的类时会出现故障 - 例如,BitmapData的子类包含用于操作舞台表示的函数。据我所知,只有一个阶段与给定的.swf关联...我觉得必须有一些方法将阶段属性传递给非DisplayObject类,而不必将它们作为参数传递。

2 个答案:

答案 0 :(得分:0)

这可以通过覆盖吸气剂来实现:

public class MyDisplayObject extends DisplayObject {
    //you constructor here

    public override function get width():Number {
        return (this.stage) ? this.stageWidth : <default>;
    }
}

这种方法不会让你遇到在将对象实际添加到舞台之前知道舞台宽度的问题。但实际上你应该听ADDED_TO_STAGE事件,在可用时设置宽度(如果你希望对象总是与舞台的宽度相同)。此外,您可以收听事件RESIZE以正确更新。

答案 1 :(得分:0)

如果您的班级中Stage不是显示列表的一部分,请将阶段作为参数传递。将舞台上的引用传递给类的构造函数。您在应用程序中的入口点是文档类,在舞台上获取参考,然后传递它。

//Somewhere, where you have reference on the stage
var helper: SomeUtilityClass = new SomeUtilityClass(this.stage);