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

XBEEN 28.12.2007 19:51

Расширение встроенного класса MovieClip
 
Подскажите, плз. Голова уже не варит :(
Хочу расширить подкласс, например, MC и возникают какие-то непонятки...

Код в теле класса MC
Код:

class MC extends MovieClip
{
        public function MC()
        {
                super();
                trace("Конструктор подкласса работает");
        }
        public function createShape(w:Number, h:Number):Void
        {
                super.moveTo(0, 0);
                super.lineTo(w, 0);
                super.lineTo(w, h);
                super.lineTo(0, h);
                super.lineTo(0, 0);
                trace("Метод createShape работает");
        }
}

Код в руте
Код:

var mc:MC = new MC();
mc = this.createEmptyMovieClip("mc", 1);
mc.beginFill(0xFFFFFF, 100);
mc.createShape(50, 50);
mc.endFill();

В итоге не виден метод createShape, о чем свидетельствует отсутствие соответсвующей надписи в панеле Output. Что у меня не так?

iNils 28.12.2007 19:56

Мувиклипы не создаются методом new. То есть экзмепляр класса будет создан, но он не будет обладать свойствами мувиклипа.
Кроме того, после первого задания значения mc, вы строчкой ниже перебиваете его.
Вам нужно либо создать пустой клип в библиотеке и назначить ему класс MC, а потом его аттачить. Либо использовать хак, чтобы изменить суперкласс клипа.

XBEEN 28.12.2007 20:08

Ну это понятно: конструктор класса можно было опустить.
Постоянно создавать мувиклипы в библиотеке с назначением подкласса МС, а потом их аттачить - не совсем удобно. Хакать суперкласс тоже не хотелось бы. Похоже на пляски с бубном.
Есть вариант использовать "композицию" (К.Мук), но тоже оказалось в итоге много лишней писанины.
Интересно, к примеру, расширить класс TextField невозможно через extends, а MovieClip?

iNils 28.12.2007 20:15

Вы же только что сами расширили MovieClip, к чему вопрос? И хак в данном случаи не так страшен и на пляски с бубном не похож.

XBEEN 28.12.2007 20:25

Расширить - расширил, а вот работоспособность подкласса никакая и всё похоже зацикливается на этом кривом методе createEmptyMovieClip().
А на счёт хака, возникает нелицеприятный вопрос с передачей исходников заказчику: у него, то этот хак не будет проделан.

P.S. Всё равно спасибо на помощь.

iNils 28.12.2007 20:27

Исходник класса или исходник fla с классом?

XBEEN 28.12.2007 20:29

Исходник fla с классами.

А как правильно хакнуть, не повредив работоспособность суперкласса? Ведь в нём все методы и свойства не описываются (intrinsic). Можно краткий пример?

iNils 28.12.2007 20:39

С помощью createEmptyMovieClip вы создаете экземпляр MovieClip, а вам нужен MC расширяющий MovieClip, то MovieClip + еще что-то, о каком повреждении идет речь?
http://www.flasher.ru/forum/showpost...0&postcount=24

XBEEN 28.12.2007 20:43

Всё понятно, пасибо. Я не правильно представлял себе процесс хака :)


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

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