Actionscript 3 as3从另一个类调用Main.as文档类中的函数

Actionscript 3 as3从另一个类调用Main.as文档类中的函数,actionscript-3,function,class,scope,Actionscript 3,Function,Class,Scope,我相信这是一个很受欢迎的问题,但我找不到我需要的确切答案。我只需要访问Main.as文档类中创建的一个或多个函数。我试过几种方法,但似乎都不管用。这是我试过的一个例子 anotherClass.as//这需要访问Main.as函数 package com { import Main; public class anotherClass { private var stageMain:Main; public function anotherClass() {

我相信这是一个很受欢迎的问题,但我找不到我需要的确切答案。我只需要访问Main.as文档类中创建的一个或多个函数。我试过几种方法,但似乎都不管用。这是我试过的一个例子

anotherClass.as//这需要访问Main.as函数

package com 
{
import Main;

public class anotherClass
    {
private var stageMain:Main;

public function anotherClass() 
        {
    // tries to call a function in Main.as called languageLoaded. NO WORK!  
        stageMain.languageLoaded("English");
    // in the Main.as languageLoaded is a public function

        }

    }
}

好的,我得到了下面的代码。这确实是一个混乱的解决方案,但我不知道有更好的办法。它起作用了。我只是希望它是稳定的,不会占用很多资源

如果你有更好的想法,我是开放的

这是主文档

package  {

import flash.display.MovieClip;
import flash.events.*;
import com.*;
import com.views.*;
import flash.display.*;
import flash.filesystem.*;
import com.greensock.*;
import com.greensock.easing.*;
import flash.system.System;



public class mainDoc extends MovieClip 
    {

    /// (Get Main Doc flow) this creates an instace of the main timeline
    /// and then I send it 
    private static var _instance:mainDoc;
    public static function get instance():mainDoc { return _instance; }



    /// Calls the defaultVars.as in to "vars".
    var vars:defaultVars = new defaultVars();



        public function mainDoc() 
        {
            /// Makes this class ready to be passed to defautVars.as
            _instance = this;
                    // Sends the _instance to defaulVars.as to be accessed later.
            vars.getMainDoc(_instance);

            // Calls a function in defaultVars.as and loads a var
            vars.loadButtonVars("English"); 
        }

    }
}
这是defaultVars.as

package com {
import flash.display.Stage;
import flash.events.*
import flash.net.*;
import flash.display.*;
import flash.filesystem.*;



    public class defaultVars
    {


        /// Makes the MainDoc.as a MovieClip
        // Not sure if this is good but it works. 
        public var MainDoc:MovieClip;


        public function defaultVars() 
        {

        }

        public function getMainDoc(_instance:MovieClip) 
        {
        trace("CALLED" + _instance);
            /// receives the _instance var and its converted to a MovieClip
            // This can now be used in any function because I declared it a public var. 
        MainDoc = _instance;
        }






public function loadButtonVars(Language:String)
    {


    myLoader.load(new URLRequest("Languages/" + Language + "/vars.xml"));
    myLoader.addEventListener(Event.COMPLETE, processXML);

     function processXML(e:Event):void 
        {
        myXML = new XML(e.target.data);

        /// Home Screen Buttons
        homeT = myXML.Button.(@Title=="homeT");
        homeB1 = myXML.Button.(@Title=="homeB1");
        homeB2 = myXML.Button.(@Title=="homeB2");
        homeB3 = myXML.Button.(@Title=="homeB3");
        homeB4 = myXML.Button.(@Title=="homeB4");
        homeB5 = myXML.Button.(@Title=="homeB5");


    /// HERE IS WHERE I CALL FUNCTION from MainDoc after xml is loaded. 
    /////////////////
    trace("xml loaded!!!! " + homeB1);
    MainDoc.languageLoaded(Language);



        }

    }



    }

}

一旦你熟悉了这一点,你就可以开始构建自定义事件,它可以携带变量发送回,更简洁的方法是简单地将对
Main
的引用传递给你想要访问它的类的构造函数

例如,您的
另一个类可以如下所示:

class AnotherClass
{
    private var _main:Main;

    public function AnotherClass(main:Main)
    {
        _main = main;
        _main.test(); // Success!
    }
}
你的主要课程是:

class Main
{
    public function Main()
    {
        var another:AnotherClass = new AnotherClass(this);
    }

    public function test():void
    {
        trace("Success!");
    }
}

这有用吗?我确实读过这篇文章。我试过了,但没用。但我不明白这句话的意思。Main.instance.usefulInstanceMethod();我想知道为什么它的实例不是_instance._instance是私有财产,你不能访问它;而“instance”是返回“\u instance”属性的getter函数。因此,如果调用Main.instance=它将返回该类的private\u实例。这确实是一个很好的解决办法。这很有效。现在我明白了。谢谢你对我的耐心马蒂!:)
class Main
{
    public function Main()
    {
        var another:AnotherClass = new AnotherClass(this);
    }

    public function test():void
    {
        trace("Success!");
    }
}