Actionscript 3 as3从另一个类调用Main.as文档类中的函数
我相信这是一个很受欢迎的问题,但我找不到我需要的确切答案。我只需要访问Main.as文档类中创建的一个或多个函数。我试过几种方法,但似乎都不管用。这是我试过的一个例子 anotherClass.as//这需要访问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() {
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!");
}
}