PDA

Просмотр полной версии : программно создать вложенный мувиклип


Agni
03.12.2009, 20:40
создаю мувиклип кодом
var reiks:MovieClip = createEmptyMovieClip('reiks1', getNextHighestDepth());
var mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.loadClip('images/r1.jpg','reiks1');

хочу создать вложенный в него мувиклип, без загрузки картинки все работает,
но с картинкой следующий код не работает:

var reiks:MovieClip = createEmptyMovieClip('reiks1', getNextHighestDepth());
var mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.loadClip('images/r1.jpg','reiks1');
var hitarea:MovieClip = reiks.createEmptyMovieClip('hitarea', getNextHighestDepth());

так тоже не работает:

var reiks:MovieClip = createEmptyMovieClip('reiks1', getNextHighestDepth());
var hitarea:MovieClip = reiks.createEmptyMovieClip('hitarea', getNextHighestDepth());
var mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.loadClip('images/r1.jpg','reiks1');


подскажите плиз, как создать внутренний мувиклип, если во внешний надо загрузить картинку

Juice_Green
03.12.2009, 21:54
загрузка изображения происходит позднее, чем создание вложенного клипа, соотвественно все содержимое reiks1 тут же стирается

Agni
03.12.2009, 22:17
загрузка изображения происходит позднее, чем создание вложенного клипа, соотвественно все содержимое reiks1 тут же стирается

...

var reiks:MovieClip = createEmptyMovieClip('reiks1', getNextHighestDepth());
var mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.loadClip('images/r1.jpg','reiks1');
var hitarea:MovieClip = reiks.createEmptyMovieClip('hitarea', getNextHighestDepth());
...


вложенный мувиклип создается позже загрузки изображения
var hitarea:MovieClip = reiks.createEmptyMovieClip('hitarea', getNextHighestDepth());

Добавлено через 18 минут
попробовал явно развести загрузку изображения и создания вложенного мувиклипа

код в руте: var reiks:MovieClip = createEmptyMovieClip('reiks1', getNextHighestDepth());
var mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.loadClip('images/r1.jpg','reiks1');

код на кнопке
on (press) {
_root.reiks1.attachMovie('qwerty','hitarea',getNextHighestDepth());
}

не работает, без использования loadClip все работает (смотрю в debugger)

не работал до этого со свойством loadClip объекта MovieClipLoader()
возможно, его использование исключает методы объекта MovieClip() :wacko:

mooncar
03.12.2009, 22:52
Если у вас одна строчка идет ниже, чем другая, то это не значит, что она выполнится позже.
Вы о методе onLoadInirt слышали? Похоже, что нет. Прочитайте, иначе смысла использовать MovieClipLoader нет. Как прочитаете, вам все сразу станет ясно.

Вам хинт: пропишите создание вложенного контента внутри onLoadInit.

Agni
03.12.2009, 23:17
Вам хинт: пропишите создание вложенного контента внутри onLoadInit.
спасибо, прочитаю обязательно

проблема в том что вынести отдельно не уверен что получится, потому как создается в нескольких циклах 40 мувиклипов с разными картинками (и динамическимим именами), и вложенный мувик хотел создавать именно при создании мува, являющегося для него контейнером

Добавлено через 4 минуты
хотя обязательно попробую :)

mooncar
03.12.2009, 23:39
Все вышеперечисленное спокойно решается, если грамотно использовать методы MCL и циклы.
Главное для вас сейчас - осознать, для чего придуман тот или иной метод MCL, и особенно - самый важный для вас сейчас onLoadInit.
Особое внимание уделите аргументу target:MovieCLip функции, которая на него назначается.

Agni
04.12.2009, 13:36
работающий код
var reiks:MovieClip = createEmptyMovieClip('reiks1', getNextHighestDepth());
var mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.loadClip('images/r1.jpg','reiks1');
var listener:Object = {};
mcLoader.addListener(listener);
listener.onLoadInit = function(reiks:MovieClip):Void {
reiks.createEmptyMovieClip('hitarea',getNextHighestDepth());
};

mooncar
04.12.2009, 14:53
Ага, только имейте ввиду - у вас аргумент reiks внутри onLoadInit только ссылается на reiks, а не есть сам reiks. То есть вот так тоже будет работать:
listener.onLoadInit = function(mc:MovieClip):Void {
mc.createEmptyMovieClip('hitarea', mc.getNextHighestDepth());
};
И как видите, следующую максимальную свободную глубину нужно брать именно внутри клипа, в который был загружен контент, у вас этого не было.

Добавлено через 3 минуты
В качестве объекта слушателя можно использовать сам текущий таймлайн, дабы не засорять ролик:
var reiks:MovieClip = createEmptyMovieClip('reiks1', getNextHighestDepth());
var mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.loadClip('images/r1.jpg','reiks1');
mcLoader.addListener(this);
this.onLoadInit = function(target_mc:MovieClip):Void {
target_mc.createEmptyMovieClip('hitarea', target_mc.getNextHighestDepth());
};

Agni
05.12.2009, 00:14
спасибо

:victory: