Search code examples
actionscript-3flashspritestage

Get stage in ActionScript-3 without a DisplayObject?


How can I get a reference to my stage without having a Sprite/DisplayObject that is added to the stage already ?


More info: I have a static class that is a utility class and I want it to initialize in static class constructor but I also need the reference to the stage.

public class UtilClass
{
    trace("init: " + stage);
}

First thing that is called in my AS-3 apps is the constructor of my main Sprite/DisplayObject and it has access to the stage. So the stage exists at that point. Then I call utility methods of my UtilClass. Now I want it to initialize by itself on the first use (when stage is already in existance).
I want to know if stage object can be accessed from anywhere without being initialized from outside of the utility class.

Edit:

public class SimpleSprite extends Sprite
{
    public static var aaa:int = 12;

    public static function test():void
    {
        trace("here I am");
    }

    trace(aaa, Capabilities.screenResolutionX+", "+Capabilities.screenResolutionY);
    test();
}

Solution

  • The stage reference is available in your MainTimeline or Main instance, depending on platform. You can add code there to pass that reference to other classes should you need it. The class should have a method (static, in your case) that'll accept a Stage parameter and store it somewhere inside the class.

    public class UtilClass {
        private static var theStage:Stage=null;
        public static function initialize(s:Stage):void {
            if (theStage) return; // we're initialized already
            theStage=s;
        }
        // once you call this, you can "trace(theStage)" and get correct output
        // other methods can also rely on theStage now.
    }
    

    Then you call UtilClass.initialize(stage); and you're set.