Я пытаюсь создать фильм с автоперемоткой с использованием маски градиента во Flash CS4 с использованием AS3. единственная проблема, с которой я сталкиваюсь, это когда фрагмент ролика достигает конца временной шкалы, maskingLayerMC теряет градиент. поэтому, пока фильм перематывается, слой маскировки не имеет градиента. он восстанавливает свой градиент, когда точка воспроизведения достигает первого кадра и снова начинает играть.
Я попытался добавить логические свойства .cacheAsBitmap в последний кадр, но он не имеет никакого эффекта, и maskingLayerMC все еще теряет градиент.
--- FIRST FRAME ---
//Gradient Masking
maskedLayerMC.mask = maskingLayerMC;
maskingLayerMC.cacheAsBitmap = true;
maskedLayerMC.cacheAsBitmap = true;
//Automatically Rewind Movie Clip
var playBackwards:Boolean = false;
addEventListener(Event.ENTER_FRAME, playDirection);
function playDirection (e:Event):void
{
if (playBackwards == true)
{prevFrame();}
else
{play();}
}
--- LAST FRAME---
//Change Boolean Variable To Rewind Movie Clip (Place In Last Frame)
stop();
playBackwards = true;
[Обновленный рабочий код]
Хотя я не уверен, почему это работает или это лучшее решение.
--- FIRST FRAME ---
//Automatically Rewind Movie Clip With Gradient Masking
maskedLayerMC.mask = maskingLayerMC;
var playBackwards:Boolean = false;
addEventListener(Event.ENTER_FRAME, playDirection);
function playDirection(e:Event):void
{
if (playBackwards == true)
{
prevFrame();
maskingLayerMC.cacheAsBitmap = true;
maskedLayerMC.cacheAsBitmap = true;
}
else
{
play();
maskingLayerMC.cacheAsBitmap = true;
maskedLayerMC.cacheAsBitmap = true;
}
}
--- LAST FRAME---
//Change Boolean Variable To Rewind Movie Clip (Place In Last Frame)
stop();
playBackwards = true;
похоже, что проблема в функции prevFrame (), поскольку простого добавления свойств один раз внутри функции playDirection недостаточно. поэтому следующий код, к сожалению, не работает.
addEventListener(Event.ENTER_FRAME, playDirection);
function playDirection(e:Event):void
{
maskingLayerMC.cacheAsBitmap = true;
maskedLayerMC.cacheAsBitmap = true;
if (playBackwards == true)
{prevFrame();}
else
{play();}
}