Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Классы, наследующие MovieClip (http://www.flasher.ru/forum/showthread.php?t=107449)

crazyone 01.02.2008 18:50

Классы, наследующие MovieClip
 
У меня давно вот есть тпроблемма. И решение есть, но оно мне перестало нравиться.
Вобщем - создаю класс, который наследует МувиКлип. Не суть важно, но допустим - нужно просто в любом месте создать мувик, в котором должен отрисоваться прямоугольник с заданными шириной, высотой, цветом:

Код:

class ColorRectangle extends MovieClip{
        private var _w:Number;
        private var _h:Number;
        private var _linecolor:Number;
        private var _color:Number;
        public function ColorRectangle(){
                this._linecolor=0;
                this._color=Math.floor(Math.random()*0xffffff+1);
                this._w=10;
                this._h=10;
        }
        public function init(w,h,color,linecolor){
                this._w=(!isNaN(w))?w:this._w;
                this._h=(!isNaN(h))?h:this._h;
                this._color=(!isNaN(color))?color:this._color;
                this._linecolor=(!isNaN(linecolor))?linecolor:this._linecolor;
        }
        public function Draw(){
                this.clearIt();
                this.lineStyle(1,this._linecolor,100);
                this.beginFill(this._color,100);
                this.moveTo(0,0);
                this.lineTo(this._w,0);
                this.lineTo(this._w,this._h);
                this.lineTo(0,this._h);
                this.lineTo(0,0);
                this.endFill();
        }
        public function clearIt(){
                this.clear();
        }
}

Все просто, но я не знаю, как правильно создать объект этого класса, который будет отображаться на сцене. Я вышел из ситуации, написав классу статический метод "createFromMC":

Код:

        public static function createFromMC(mc:MovieClip) {
                var inst:Object = new ColorRectangle(mc);
                for (var i in inst) {
                        mc[i] = inst[i];
                }
                mc.constructor = inst.constructor;
                mc.__proto__ = inst.__proto__;
                return mc;
        }

Теперь достаточно написать
Код:

import ColorRectangle;
var mc=_root.createEmptyMovieClip(name,depth);
var crect=ColorRectangle.createFromMC(mc);

И у нас будет объект, с которым можно работать.

Внимание - вопрос: "Нет ли более нормального способа создать объект класса, который наследуется от мувиклипа, не используя символы библиотеки?"

manah 03.02.2008 09:42

слушай у тебя в конструкторе "ColorRectangle()" параметров нет, зачем ты положил туда "mc" (new ColorRectangle(mc))?

MrPoma 03.02.2008 10:32

Цитата:

Сообщение от crazyone
Внимание - вопрос: "Нет ли более нормального способа создать объект класса, который наследуется от мувиклипа, не используя символы библиотеки?"

а вы и так не используете. экземпляр ведь программно создается.
код, который вы скопипастили - лучший вариант

wvxvw 03.02.2008 12:47

Ничего не понимаю... %) А зачам нужен этот статический метод? =)
Если класс должен быть привязан к символу в библиотеке, то проще всего его создать используя attachMovie(), если нет, то передать конструктору ссылку на клип, где нужно создать объект класса.

ЗЫ. Покажите пример использования... а то чего-то ничего в голову не приходит =)

etc 03.02.2008 14:11

Цитата:

Сообщение от crazyone
Внимание - вопрос: "Нет ли более нормального способа создать объект класса, который наследуется от мувиклипа, не используя символы библиотеки?"

Использовать композицию, например.

crazyone 04.02.2008 13:02

Цитата:

Сообщение от manah
слушай у тебя в конструкторе "ColorRectangle()" параметров нет, зачем ты положил туда "mc" (new ColorRectangle(mc))?

А. Эм. Ну это как универсальный метод. По привычке всунул. Если в конструкторе нужно в этом мувике что-то создать - то нужна ссылка на мувик.

Цитата:

а вы и так не используете. экземпляр ведь программно создается.
код, который вы скопипастили - лучший вариант
:( Просто не нравится он мне. Как-то через задницу. Вдруг есть что-то более нормальное...

Цитата:

Использовать композицию, например.
Ну... Композиция и наследование - все же разные вещи. Но наверное таки надо будет пересмотреть свои взгляды на то - что же лучше.


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

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