matteok
matteok

Reputation: 2199

AS3 access class instance from everywhere

for my current project I am starting to work with AS3 and I have written a ClipManager class where I can define an MC like "mainView" during initialization like this:

clipManager:ClipManager = new ClipManager(mainView);

With my clipManager I can now easily load stuff into the mainView etc. The problem is that I want every button throughout the whole thing to access Class Methods of this instance to alter the mainView. Can I have something like a global Class instance in Flash or is there any smarter way to achieve what I am trying to do?

Upvotes: 0

Views: 320

Answers (1)

divillysausages
divillysausages

Reputation: 8053

You can either add your ClipManager class as a static somewhere - i.e. a god object - (perhaps your main class) and access it through that, or you can use the Singleton pattern.

A common way to implement it in as3:

public class Singleton
{
    private static m_instance:Singleton = null; // the only instance of this class
    private static m_creating:Boolean   = false;// are we creating the singleton?

    /**
     * Returns the only Singleton instance
     */
    public static function get instance():Singleton
    {
        if( Singleton.m_instance == null )
        {
            Singleton.m_creating    = true;
            Singleton.m_instance    = new Singleton;
            Singleton.m_creating    = false;
        }
        return Singleton.m_instance;
    }

    /**
     * Creates a new Singleton. Don't call this directly - use the 'instance' property
     */
    public function Singleton()
    {
        if( !Singleton.m_creating )
            throw new Error( "The Singleton class can't be created directly - use the static 'instance' property instead" );
    }
}

Now, to access your class, you call Singleton.instance. There'll only ever be one instance of this class.

As for anti-patterns etc, well that's another post :)

Upvotes: 3

Related Questions