#flash #actionscript-3
#flash #actionscript-3
Вопрос:
Мне было интересно, возможно ли внедрить фреймовый скрипт в видеоролик и получить ссылку на mc, в который был введен скрипт, из функции, используемой в качестве фреймового скрипта.
Простой рабочий пример таков:
Существует видеоролик с именем mc. Где-то там есть метка кадра ‘end’, и мы хотим добавить stop() к этому кадру, не добавляя код к самому видеоролику (имейте в виду, что это всего лишь пример). Итак, вот код (мы могли бы поместить его в основную временную строку тестового фильма, в котором mc находится на сцене):
var end:int=0;
for (var i:int=0;i<mc.currentLabels.length;i )
{
if (mc.currentLabels[i].name=='end')
end=mc.currentLabels[i].frame;
}
function doStop():void{
mc.stop();
}
// Frame script for label 'end'
mc.addFrameScript(end-1,doStop); // Frames are 0-based here
Когда начало воспроизведения достигает кадра с надписью «end» в mc, функция doStop() будет выполнена. Однако эта функция сохраняет свою первоначальную область видимости. Итак, чтобы остановить mc, нам нужно указать mc.stop() . ‘this’ указывает на объект, где находится функция doStop, поэтому this.stop() не будет работать. Если бы мы хотели использовать одну и ту же функцию для нескольких mc, нам пришлось бы каким-то образом получить ссылку на текущий целевой mc. Итак, это то, что я искал.
Ответ №1:
Просто сохраните ссылку на mc clip :
function doStop(target : MovieClip):Function{
return function():void
{
target.stop();
}
}
// Frame script for label 'end'
mc.addFrameScript(end-1,doStop(mc)); // Frames are 0-based here
Комментарии:
1. Да, великолепно. Это действительно работает. Спасибо вам за то, что указали на этот подход.