AS 3.0: вызов метода, определенного в другом классе, из класса Main приводит к ошибке 1120 - PullRequest
1 голос
/ 16 августа 2010

У меня есть два класса. Основной класс вызывает функцию, которая определена во втором классе. Я получаю следующую ошибку: Ошибка 1120: доступ к неопределенному свойству myFunction

По сути, я создаю кнопки в главном классе, которые добавят соответствующий дочерний элемент к объекту во втором классе (если вы нажмете одну кнопку, будет добавлен дочерний элемент 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);
            }
            }   
        }   
    }   
}

Я пытался определить новую переменную как общедоступную статическую переменную, но это не сработало. Я также попытался импортировать Второй класс в Основной класс, и это тоже не сработало. Какие-нибудь мысли? спасибо!

Ответы [ 3 ]

2 голосов
/ 16 августа 2010

Я согласен с ThatSteveGuy, в Main вы вызываете функцию, которая не существует, а именно selectPlayer ().Следуя вашему коду, первое, что вы должны сделать, это добавить функцию selectPlayer () в Main.

Затем вам нужно будет добавить экземпляр второго класса в Main, чтобы сработало следующее

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

Теперь немного сложно дать вам дальнейшие рекомендации, потому что этот способДелать вещи выглядит немного запутанно, но опять же, мне нужно увидеть общую картину.Это просто объяснение того, почему ваш код не работает.Кроме того, во втором классе selectPlayer может выдать ошибку, потому что Game (this.parent) вернет нулевое значение, поэтому вы не сможете получить доступ к свойству поворота ...

Есть веская причинапочему вам нужно добавить две кнопки в Main, а не добавить их в Second?

2 голосов
/ 16 августа 2010

Если я понимаю, что говорит ваш код, вы не можете делать то, что делаете.Даже если вы слушаете события на X1 и X2, вы слушаете их ОТ main.Другими словами, main пытается обработать событие и не находит указанную вами функцию (selectPlayer).Если вы хотите, чтобы вся обработка событий происходила в main, тогда main будет вызывать X1 и X2 при получении события.

0 голосов
/ 16 августа 2010

попробуйте

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

(и не забудьте удалить x1.addEventListener, x2.addEventListener из main)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...