簡體   English   中英

as3從另一個類調用Main.as Document Class中的函數

[英]as3 calling a function in Main.as Document Class from another class

我相信這是一個很受歡迎的問題,但我找不到我需要的確切答案。 我只需要訪問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

        }

    }
}

更簡潔的方法是簡單地將對Main的引用傳遞給您希望能夠訪問它的類的構造函數。

例如,您的AnotherClass可能如下所示:

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!");
    }
}
public class MainDoc extends MovieClip // as long as it extends eventDispatcher you re fine
{
  private var otherClass:OtherClass;
  public function MainDoc()
  {
    otherClass = new OtherClass();
    otherClass.addEventListener("otherClassCustomEvent", onOtherClassReady);
    otherClass.startLogic();
  }
  public function onOtherClassReady(event:Event = null)
  {
    trace("from other class:", otherClass.infoToShare) // traces "from other class: YOLO!"
  }
}

public class OtherClass extends EventDispatcher // must extend the event dispatcher at least
{
  public var infoToShare:String;
  public function OtherClass()
  {
  }
  public function startLogic()
  {
    // do what you got to do
    // when you have your data ready
    infoToShare = "YOLO!";
    dispatchEvent("otherClassCustomEvent");
  }
}

一旦您對此感到滿意,您就可以開始構建可以攜帶變量發送回的自定義事件

好的,我得到了以下代碼。 這真的是一個混亂的解決方案,但我不知道更好的方法。 有用。 我只是希望它穩定並且不會使用大量資源。

如果你有一個更好的想法我是開放的。

這是MainDoc.as

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);



        }

    }



    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM