PDA

Просмотр полной версии : Расширение встроенного класса MovieClip


XBEEN
28.12.2007, 19:51
Подскажите, плз. Голова уже не варит :(
Хочу расширить подкласс, например, 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.php?p=637560&postcount=24

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