Форум 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=134202)

dixlofos 23.12.2009 22:05

как использовать метод класса?
 
Есть у меня фла файл с мувиклипом, базовый класс мувиклипа = Base:
Код AS3:

package {
 
        import flash.display.MovieClip;
 
        public class Base extends MovieClip{
 
                public function Base():void{                       
                        var rt1 = new Rotation_class();                       
                }
        }
}

есть другой класс Rotation_class:
Код AS3:

package {
 
        import flash.display.MovieClip;
 
        public class Rotation_class extends MovieClip{
 
                public function Rotation_class(){                                 
                }
 
                public function rotate_me(){
                    this.rotation+=10;
                }
        }
}

символ из библиотеки уже добавлен на сцену и его instance name = my_rect
Как мне к нему применить функцию rotate_me() класса Rotation_class, не особо меняя структуру всего происходящего?
(тобишь я знаю, что если ф-цию rotate_me() дописать в класс Base, а патом в фла файле написать my_rect.rotate_me(); , то все будет работать, а мне самый интерес в том, что бы сделать свою библиотеку классов, а эту проблему я некак не могу осилить:umnik2:)

gloomyBrain 23.12.2009 23:23

Передать ссылку на экземпляр Base в конструкторе Rotation_Class
Base:
Код AS3:

package {
 
        import flash.display.MovieClip;
 
        public class Base extends MovieClip{
 
                public function Base():void{                       
                        var rt1 = new Rotation_class(this);                       
                }
        }
}

Rotation_Class
Код AS3:

package {
 
        import flash.display.MovieClip;
 
        public class Rotation_class extends MovieClip{
 
        private var baseMovie:Base;
 
                public function Rotation_class(baseMovie:Base){
 
                        this.baseMovie = baseMovie;
 
                }
 
                public function rotate_me(){
                    this.baseMovie.rotation+=10;
                }
        }
}


dimarik 24.12.2009 00:29

Цитата:

базовый класс мувиклипа = Base:
Извините за дотошность, но базовый класс мувиклипа - это Object. Ваш Base стоит предпоследним в пищевой цепочке цепочке наследования библиотечного мувиклипа и не может считаться базовым.

По сути. Не стоит так заморачиваться и создавать _Отдельный_Класс_Реализующий_Поворот_На_Десять_Градусов_.

Традиционно: "некак" - это, извините, когда не получается сходить по-большому...

udaaff 24.12.2009 00:34

Под базовым скорее всего подразумевался Base class из linkage properties. Хотя, возможно, и нет... :)

dimarik 24.12.2009 00:45

Цитата:

Сообщение от udaaff (Сообщение 874730)
Под базовым скорее всего подразумевался Base class из linkage properties. Хотя, возможно, и нет... :)

Дружище, udaaff! Это все понятно, но нужно как-то прививать любовь к точным определеням. И к русскому языку в частности.

Psycho Tiger 24.12.2009 01:07

Цитата:

Ваш Base стоит предпоследним
У меня вдруг ощущение, что я что-то не понимаю...
Может, в цепочке чего забыл, но не суть - Base стоит самым первым ведь (ну хорошо, если смотреть вглубь - то последним).
dimarik, если ты не ошибся - то кто тогда стоит первым? :O
Base -> MovieClip -> Sprite -> Shape -> DisplayObject -> EventDispatcher -> Object

udaaff 24.12.2009 01:13

Цитата:

Сообщение от dimarik (Сообщение 874738)
Дружище, udaaff! Это все понятно, но нужно как-то прививать любовь к точным определеням. И к русскому языку в частности.

Ну да... согласен с вами, дружище dimarik. Главное — без фанатизма :victory:

dimarik 24.12.2009 01:20

Цитата:

Сообщение от Psycho Tiger (Сообщение 874746)
У меня вдруг ощущение, что я что-то не понимаю...
Может, в цепочке чего забыл, но не суть - Base стоит самым первым ведь (ну хорошо, если смотреть вглубь - то последним).
dimarik, если ты не ошибся - то кто тогда стоит первым? :O
Base -> MovieClip -> Sprite -> Shape -> DisplayObject -> EventDispatcher -> Object

libraryClass -> Base -> MovieClip -> Sprite -> Shape -> DisplayObject -> EventDispatcher -> Object

Все правильно, Base предпоследний.

По-поводу что считать первым. Ты же не считаешь Адама последним в цепочке наследования человечества.

Sprite никогда не наследовался от Shape.
Sprite -> DisplayObjectContainer -> InteractiveObject -> DisplayObject -> EventDispatcher -> Object

chabapok 24.12.2009 02:16

попробуйте:

дописываете в base.as
import Rotation_class.rotate_me;

и используете:
rotate_me();
тут я не уверен, что this укаже куда надо
----------------
Но есть способ 2.
Код AS3:

 
//в классе Base пишем так
 
var rt1_func:Function = rt1.rotate_me; //тут обратите внимание на большие
//и малые буквы
 
rt1_func.call(this);

Добавлено через 5 минут
стало быть и вот так должно получиться:
rt1.rotate_me.call(this)

или в вашем случае my_rect.rt1.rotate_me.call(this), но переменную rt1 все же прийдется сделать public

dimarik 24.12.2009 02:27

chabapok, Вам поршня менять нужно. А то прихватит.


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

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