PDA

Просмотр полной версии : ООП (Методы программно созданных клипов)


znick
02.04.2002, 14:39
Осваиваю ООП во Flash. Есть постоянная проблемма.

Допустим сделал клип, в его первом кадре создал свои свойства (т.е. var имя_свойства), свои методы (function имя_метода {...}), которые управляют поведением клипа (свойства _x, _y и т.д.) и его данными. Т.е. создал свой объект-клип (дальше [child]). [Как написано в прилагаемой к FLASH 5 документации - клип то же объект.]
Теперь из клипа-родителя[parent] с помощью duplicateMovieClip наплодил несколько дочерних клипов, таких же как child:
for(i=1; i<кол-во_нужных_клипов; i++) {
оригинал.duplicateMovieClip("копия"+i,i);
}
И по идее хотелось бы вызывать методы всех этих размноженных клипов и использовать их свойства (те которые сам создал).
Свойства то работают, работают так же и методы оригинала, т.е. клипа который был расположен на сцене в ручную. Но методы программно созданных клипов даже не вызываются.
Конечно можно писать методы в клипе родителе (parent) с параметром, который передает нужный дочерний, объект клип, но код получается запутанным и теряется смысл ООП.
Может есть у кого-нибудь есть простенький работающий пример, использования методов, программно размноженных объектов-клипов? Вышлите пожалуйста.
Заранее благодарен.

Aib
02.04.2002, 20:11
Ты что сделать-то хочешь?
Если методы клипов переопределить, то это impossible.

znick
03.04.2002, 00:27
Конечная цель такова: управление клипом не набором свойств:

имя_клипа._visible=...;
имя_клипа._rotation=...;
имя_клипа.свое_свойство0=...;
имя_клипа.свое_свойство1=...;
...

а просто написать метод, что бы контролировать клип конструкцией вида:

имя_клипа.имя_метода(список параметров);


К примеру эффект фейерверка(Как то делал на C++/OpenGL).
сейчас хочу реализовать во флэше.

Изначально на сцене лежит только один клип "firework".
Просто какой нибудь кружочек с радиальной заливкой или что то вроде звездочки.
В нем определен метод "start" для запуска по направлению, скорости, цвету времени до взрыва и др.
Так же есть методы для расчета шага полета, взрыва и др.
После вызова метода "start" клип полетел в зависимости от параметров.
В момент взрыва нужно вызвать метод "explosion", который размножит клип "firework" и запустит каждый экземпляр в случайном направлении (вызовет метод "start", для каждого из них).

И если все делать в этом порядке, то получится так:
"firework" полетит, но после взрыва, размноженные клипы останутся на месте(т.к. не сработают методы "start").

Эффект я конечно сделал(у меня zipа нет, просто переименуй файл в swf). Но попробовав быстро адаптировать его в другой проект столкнулся с трудностями.

сочиNetz
03.04.2002, 00:46
2Aib
А если я переопределю, что мне за это будет? ;);)

Щас придет john, вам такого расскажет :)

DeliMIter
03.04.2002, 14:54
2Aib

Да, на твоем месте я бы поостерегся произносить такое вслух, да еще и громко...

2znick

Создаешь массив со своими клипами

clipStock = new Array();

for (var i = 0; i < _max; i++) {
yourClip.duplicateMovieClip("newName" + i, i);
clipStock.push(this["newName" + i]);
}

после чего обращаешься к клипам через

clipStock[_index].method_name(arguments);

RFMitrio
03.04.2002, 15:04
Пишешь где угодно:
movieClip.prototype.Method=function(параметры)
{
суть метода.
}
И вызывай потом этот метод откуда угодно, поскольку метод теперь добавился к прототипу объекта мувиклип!

RFMitrio
03.04.2002, 16:07
Некоторое уточнение: прототип надо изменить ДО использования нового метода в соответствии с порядком загрузки мувика ( например, если грузятся сначала верхние слои, а потом нижние - надо прототип изменять в высшем слое по отношению к слою с использованием метода )

Aib
03.04.2002, 17:24
Ну, не знаю. Я, помниться, когда совершал подобное, ошибки не выдавались, просто всё вешалось и дело с концом. Я не спорю, может у Меня тогда просто что-то другое глючило...
Публичное сорри, больше не буду. :)

znick
03.04.2002, 17:43
После компиляции в SWF нет информации о слоях.
Откуда сведения о порядке загрузке?

RFMitrio
03.04.2002, 18:01
Смотри паблиш сеттингс. там можно устанавливать порядок загрузки ( лоад ордер: боттом ап и топ даун ).

DeliMIter
03.04.2002, 18:57
2RFMitrio

Зачем запихивать метод в прототип, если суть задачи сводилась к адресации требуемых клипов?