PDA

Просмотр полной версии : Управление вложеным мувиком


harrisunreal
04.11.2009, 20:17
Я полный ноль в AS, но есть задача и ее необходимо решить.
Необходимо управлять и иметь доступ к объекту подгруженного мувика.


var container:MovieClip = createEmptyMovieClip("container", getNextHighestDepth());
var mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.addListener(this);
mcLoader.loadClip("24.swf", container); //подгружаем внешний мувик

function onPress (target_mc:MovieClip)
{
trace (target_mc._currentframe); //здесь хочу узнать текущий номер фрейма
}

function onLoadInit (target_mc:MovieClip)
{
trace (target_mc._totalframes); //количество фреймов подгруженного мувика
}


У меня получается, что доступ есть только в функции onLoadInit().

mooncar
04.11.2009, 20:28
Аналогия тут не годится.
onLoadInit - это анонимная функция-обработчик слушателя, которым в данном случае выступает сам текущий ролик, точнее, уровень таймлайна, где записан этот код.
А onPress же должно относится к загружаемому ролику. Нужно записать так:
var container:MovieClip = createEmptyMovieClip("container", getNextHighestDepth());
var mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.addListener(this); //тут this - это текущий таймлайн
mcLoader.loadClip("24.swf", container); //подгружаем внешний мувик

this.onLoadInit = function (target_mc:MovieClip) {
//все операции с загруженным роликом выполняем строго внутри onLoadInit, в том числе и назначение ему ф-ии обработки события onPress
trace (target_mc._totalframes);
target_mc.onPress = targetOnPress;
}

function targetOnPress () {
trace(this._currentframe) //а тут this - это загруженный ролик
}

harrisunreal
05.11.2009, 12:21
Не работает. Событие нажатия мышкой не обрабатывается.

mooncar
05.11.2009, 12:57
Нет, код верный.
Не работать может, если, например, в загруженном ролике нет заливки в месте, где делается клик.

harrisunreal
05.11.2009, 13:05
Попробовал с другими SWF-ми, с некоторыми работает, но попрежнему выводит 1 - номер "родительского" фрейма, а не подгруженного. В onLoadInit я могу получить количество кадров подгруженного мувика. Необходимо в любое время знать текущий (проигрываемый) номер кадра.

mooncar
05.11.2009, 13:23
Проверьте:
function targetOnPress () {
//trace(this._currentframe) //а тут this - это загруженный ролик
trace(this)
}
Выведет:

_level0.container

То есть this указывает на загруженный ролик, а трейс this._currentframe выведет именно текущий кадр загруженного.
Если не верите, см. приложенный пример.

harrisunreal
05.11.2009, 13:34
У меня выводит: _level0.application.container
Спасибо за ответы, я для начала разберусь с версиями своих флешек и самой IDE, а то не могу открыть Ваши примеры.

Добавлено через 57 часов 2 минуты
Спасибо, все работает.