我有一个带有Main.as自定义类的AS3程序。
在这个课程中,我加载一个'menu'movieclip的实例,里面有simpleButton实例...如何通过菜单movieclip按钮访问Main类公共函数?
即。菜单按钮 - > GotoPage记述(5); (这是主要的公共职能)
如果我尝试使用上述语句访问Main函数,则会给出
“1180:调用可能未定义的方法gotoPage。
答案 0 :(得分:4)
在Main类上创建一个名为GetMain()的静态方法,该方法将返回Main的实例(Main应该是一个单例)。
package whatever
{
public class Main
{
private static var _instance:Main = null;
public static function getMain():Main
{
return _instance;
}
// Main constructor
function Main(..):void
{
_instance = this;
}
}
}
要从Menu类中引用Main()实例,您可以使用:
Main.getMain().gotoPage(5);
答案 1 :(得分:1)
你想用事件来做这件事。如果您的菜单movieclip是Main.as的子项,请在菜单movieclip中命名实例按钮,并在Main.as中设置监听器:
1)将以下代码放在构造函数中:public function Main(){...
menu.button_a.addEventListener(MouseEvent.CLICK, onButtonClick);
menu.button_b.addEventListener(MouseEvent.CLICK, onButtonClick);
2)然后在Main.as中编写onButtonClick函数
private function onButtonClick(e:MouseEvent):void{
switch(e.currentTarget.name){
case "button_a":
//call the Main.as function you want here
break;
case "button_b":
//call a different Main.as function
break;
}
答案 2 :(得分:1)
ruedaminute关于从按钮调度事件并主要处理这些事件的答案是迄今为止处理这个事件的最佳方法,但是在as3中有很多方法可以做到这一点 - 但是尝试使用上述技术。一些其他技术。
从按钮 - 尝试this._parent.GotoPage(1);
但是this._parent可能不是主要的,做一个跟踪(this._parent),并继续尝试 它可能最终成为 this._parent._parent._parent.GotoPage(1)取决于您的显示树层次结构。
同样,这是非常糟糕的OOP实践,但是,它会起作用。
另一个tecnique - 使用单例作为main-看起来像你已经 - 添加相同的公共方法,然后从按钮单击,你可以做Main.getMain()。GotoPage(1);
这样更好一点,因为你可以改变显示树,而不必弄清楚主要在显示树中的位置,但是出于各种原因也不鼓励单身人士,但在这种情况下,我会从那以后就这么说了。
祝你好运! ~JT