Как возобновить анимацию с последней позиции, независимо от того, приостановил ли я ее на основной временной шкале или анимации ребенка / внука?
Я нашел общий рекурсивный цикл, который останавливает / приостанавливает все дочерние мувиклипы. Если я изменяю stop для воспроизведения в коде, он воспроизводит все дочерние мувиклипы одновременно. Я хочу возобновить только одну анимацию за раз. Я хочу общий рекурсивный цикл, который возобновляет анимацию с последней позиции (позиции, в которой она была приостановлена), независимо от того, был ли я приостановлен на основной временной шкале анимации или анимации в дочерних видеоклипах или анимации в видеоклипах внуков. (У меня есть анимации на основной временной шкале, анимации в последнем фрейме MC основной временной шкалы и снова в последнем фрейме MC дочерней временной шкалы). Как я могу это сделать? Я новичок во флэш, поэтому, пожалуйста, простые объяснения / предложения. Благодарю.
btnStart.addEventListener(MouseEvent.CLICK, startMotion);
function startMotion(evt:MouseEvent):void {
playAllChildMovieClips(stage);
}
function playAllChildMovieClips(displayObject:DisplayObjectContainer):void{
var numChildren:int = displayObject.numChildren;
for (var i:int = 0; i < numChildren; i++) {
var child:DisplayObject = displayObject.getChildAt(i);
if (child is DisplayObjectContainer) {
if (child is MovieClip) {
MovieClip(child).play();
}
playAllChildMovieClips(DisplayObjectContainer(child));
}
}
} Вероятно, я не очень хорош в объяснении вещей. Итак, я перефразирую свой вопрос, и если вы хотите, вы можете скачать и посмотреть мои файлы. У меня есть родительский SWF, который имеет кнопку возобновления / воспроизведения. Родительский SWF загружает дочерний SWF. Child SWF имеет анимацию с голосом на нескольких уровнях. Когда я использую приведенный выше код, кнопка остановки останавливает анимацию на всех уровнях, но кнопка возобновления / воспроизведения возобновляется, а также перематывает анимацию и голос за кадром. Хотелось бы, чтобы кнопка возобновления анимации не возобновлялась с самого начала? Если я все еще не вижу смысла, просмотрите файлы, представленные в ссылках: http: //www.mediafire.com/? Ks3ibqt9kcpx4, http://www.mediafire.com/file/8rncs0c8chy8a6i/clip4.swf, http://www.mediafire.com/file/ea1gm0za6l6kva0/clip4.fla. Спасибо
1 ответ
Просто создайте новую функцию, которая останавливает мувиклипы. Разница между функциями заключается в том, что первая использует play(), а другая - stop(). Похоже, ваша оригинальная функция работает таким образом.
playAllChildMovieClips(targetMovieclip); // using MovieClip(child).play();
stopAllChildMovieClips(targetMovieclip); // using MovieClip(child).stop();
btnStart.addEventListener(MouseEvent.CLICK, startMotion);
btnStop.addEventListener(MouseEvent.CLICK, stopMotion);
function startMotion(evt:MouseEvent) : void
{
playAllChildMovieClips(stage);
}
function playAllChildMovieClips(displayObject:DisplayObjectContainer):void{
var numChildren:int = displayObject.numChildren;
for (var i:int = 0; i < numChildren; i++) {
var child:DisplayObject = displayObject.getChildAt(i);
if (child is DisplayObjectContainer) {
if (child is MovieClip) {
MovieClip(child).play();
}
playAllChildMovieClips(DisplayObjectContainer(child));
}
}
}
function startMotion(evt:MouseEvent) : void
{
stopAllChildMovieClips(stage);
}
function stopAllChildMovieClips(displayObject:DisplayObjectContainer):void{
var numChildren:int = displayObject.numChildren;
for (var i:int = 0; i < numChildren; i++) {
var child:DisplayObject = displayObject.getChildAt(i);
if (child is DisplayObjectContainer) {
if (child is MovieClip) {
MovieClip(child).stop();
}
stopAllChildMovieClips(DisplayObjectContainer(child));
}
}
}