AS3 как внедрить framescript и получить ссылку на mc, в который был введен скрипт

#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. Да, великолепно. Это действительно работает. Спасибо вам за то, что указали на этот подход.