Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Флеш вылетает при попытке наследоваться от класса документа. (http://www.flasher.ru/forum/showthread.php?t=145020)

джонатан 27.09.2010 19:53

Флеш вылетает при попытке наследоваться от класса документа.
 
Fla файл, класс документа com.flashgangsta.Main:


Код AS3:

package com.flashgangsta {
 
        import flash.display.MovieClip;
        import flash.events.Event;
 
        public class Main extends MovieClip {
 
 
                public var menu:MovieClip;
 
 
                public function Main() {
                        this.addEventListener( Event.ADDED_TO_STAGE, init );
                }
 
                public function init( event:Event ):void {
                        this.removeEventListener( Event.ADDED_TO_STAGE, init );
                        menu = new Menu();
                        this.addChild( menu );
                }
 
        }
 
}

Мувиклип Menu:

Код AS3:

package com.flashgangsta {
 
        import flash.display.MovieClip;
 
        public class Menu extends Main {
 
                public function Menu() {
 
                }
        }
}

при попытке компиляции, флеш зависает и вылетает. В чем же беда?

BlooDHounD 27.09.2010 20:07

а вы у себя рекурсии не видите в коде?

джонатан 27.09.2010 20:14

Честно говоря нет, но кажется начинаю понимать потихонечку. Тыкните пожалуйста пальцем, а-то я пока в AS3 нуб. :( Учусь :)
Нужели при наследовании вызывается конструктор суперкласса?

easy.proger 27.09.2010 20:27

Ну и причем тут "а-то я пока в AS3 нуб" ?

Вот, что у вас происходит

Вы создаете объект, который при добавлении на сцену создаст новый объект и добавит его на сцену, дальше новый объект создаст опять объект и опять его добавит на сцену и т/д

Hidest 27.09.2010 20:29

Конечно вызывается... Вам не наследование от документ класса нужно, а просто menu будет дочерним элементов в списке отображения. Не путайте теплое с мягким :)

джонатан 27.09.2010 20:31

т.е. я правильно понял, что Main создает Menu, который опять вызывает конструктор Main и создает Menu, верно? А как же мне тогда быть? Я просто хочу из Menu вызывать методы Main... Но не хочу ограничиваться только статикой.

Hidest, т.е. из меню я смогу вызывать методы класса Main через parent?

Hidest 27.09.2010 20:34

Ну если хотите, вызывайте (если уверены, что у вас меню будет всегда находится в main, а не переместиться когда-нибудь в какой-нибудь контейнер)... или передавайте ссылку в конструктор, тогда вам будет все равно на все изменения иерархии в дисплей листе.

Код AS3:

package com.flashgangsta {
 
        import flash.display.Sprite;
 
        public class Menu extends Sprite {
 
        private var _target:Main;
 
                public function Menu(menuTarget:Main)
              {
                    _target = menuTarget;
                    _target.doSomething();
                }
        }
}


джонатан 27.09.2010 20:45

по parent не вышло:
E:\!!WORK\!flashgangsta.com\src\..\com\flashgangsta\Menu.as, Line 15 1061: Call to a possibly undefined method test through a reference with static type flash.display:DisplayObjectContainer.

а вот по передаче в конструктор все ок. Спасибо большое всем, сегодня я узнал много нового, а главное полезного! :)

Hidest 27.09.2010 21:15

Так в тесте ошибки все у вас сказано бежевым по серому: нет метода test у экземпляра класса.

(parent as Main).yourMethodInMainClass();

джонатан 20.10.2010 17:45

Возвращаюсь к теме. У меня возникла проблемка с вызовом метода родительского класса через ссылку.

Код AS3:

public class Main extends MovieClip {
        public function Main() {
            sectionsContainer = new Sprite();
            personagesRepository = new PersonagesRepository( this );
            sectionsContainer.addChild( personagesRepository );
            this.addChild(sectionsContainer);
        }
 
        public function showProfile():void {
                trace( "showProfile" );
        }
}

Код AS3:

public class PersonagesRepository extends MovieClip {
 
        public function PersonagesRepository( mainLink:Object ) {
                main = mainLink as Main;
                main.showProfile();
        }
}

Ошибка: 1195: Attempted access of inaccessible method showProfile through a reference with static type com.russianRoulette:Main.

Подскажите пожалуйса как исправить?

Кстати вот так:

Код AS3:

main.showProfile.call();

Ошибки нет!


Часовой пояс GMT +4, время: 23:20.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.