AS 3.0:从Main类调用另一个类中定义的方法,得到错误1120

时间:2010-08-16 02:52:47

标签: actionscript-3 variables methods

我有两节课。 Main类调用一个函数,该函数在Second类中定义。我收到以下错误: 错误1120:访问未定义的属性myFunction

基本上,我在Main类中创建了一个按钮,它将相应的Child添加到Second类中的Object中(如果单击一个按钮,将添加子x1,如果单击另一个按钮,将添加子x2) ,等等。)

以下是Main.as文件的相关代码:

package
{   
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.MouseEvent;         
    public class Main extends MovieClip {
        private var x1:X1 = new X1();
        private var x2:X2 = new X2();

        public function Main():void {
            addPlayers();           
        }

        public function addPlayers():void {
            addChild(x1);
            addChild(x2);
            x1.x=325;
            x1.y=5;
            x2.x=366;
            x2.y=5;

            x1.label = "dog";
            x2.label = "cat";

            x1.addEventListener(MouseEvent.CLICK, selectPlayer);
            x2.addEventListener(MouseEvent.CLICK, selectPlayer);
        }       
    }
}

Second.as文件代码是:

package  
{
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.EventDispatcher;
    import flash.events.MouseEvent;

    public class Second extends MovieClip
    {
        public var myVar:MyVar = new MyVar();

        public function Second():void
        {   
            addChild(myVar);                        
        }

        private var mc_x1:Mc_x1 = new Mc_x1();
        private var mc_x2:Mc_x2 = new Mc_x2();      

        public function selectPlayer(event:MouseEvent):void
        {
            if (Game(this.parent).turn == 0) {
                myVar.addChild(mc_x1);
            } else {        
            switch (event.currentTarget.label) {
            case "dog":
            myVar.addChild(mc_x1);
            break;
            case "cat":
            myVar.addChild(mc_x2);
            break;
            default:
            myVar.addChild(mc_x1);
            }
            }   
        }   
    }   
}

我已经尝试将一个新变量定义为公共静态var并且没有用。我也尝试在Main类中导入Second类,但也没有用。有什么想法吗? 谢谢!

3 个答案:

答案 0 :(得分:2)

如果我理解你的代码所说的内容,你就无法做你想做的事情。即使您正在侦听X1和X2上的事件,您正在收听他们的主要内容。换句话说,main正在尝试处理事件,并且它没有找到您指定的函数(selectPlayer)。如果您希望所有事件处理都发生在main中,那么main将在收到事件时调用X1和X2。

答案 1 :(得分:2)

我同意ThatSteveGuy,在Main中你正在调用一个不存在的函数,即selectPlayer()。在您的代码之后,您应该做的第一件事是在Main中添加一个selectPlayer()函数。

然后,您需要在Main中添加Second类的实例,以便以下工作

private function selectPlayer(event:MouseEvent):void
{
    second.selectPlayer(event);
}

现在进一步建议你有点困难,因为这种做事方式看起来有点复杂但是我需要再次看到全局。这只是解释您的代码无效的原因。此外,在第二个类中,selectPlayer可能会抛出一个错误,因为Game(this.parent)将返回一个空值,因此您将无法访问转弯属性...

是否有充分的理由需要在Main中添加两个按钮而不是在Second中添加它们?

答案 2 :(得分:0)

试试这个

 public function Second():void
 {   
            this.addEventListener(MouseEvent.CLICK, selectPlayer);
            addChild(myVar);                        
}

(不要忘记从main中删除x1.addEventListener,x2.addEventListener)