2012-06-13 2 views
4

Я пытаюсь сделать кнопку во Flash, которая приостанавливает все клипы, которые работают в моем файле. Ни один из этих видеороликов не является подростком на моей основной временной шкале, у всех есть своя индивидуальная шкала времени. Каждый клик перемещения запускается кнопкой, которая сообщает клипам начать воспроизведение. Поэтому, если бы кто-нибудь мог помочь мне создать эту кнопку паузы, я был бы очень признателен. Спасибо за ваше время.Как сделать универсальную кнопку паузы во Flash CS5?

+0

Read [* * this **] (http://www.catb.org/~esr/faqs/smart-questions.html#before) first – strah

ответ

2

Следующая следует сделать трюк:

// create an array to store all playing movieclips 
var playing = []; 

// when a movieclip is played add it to the array like this: 
// playing.push(myMovieClip); 

// call this from your pause button's click handler 
function pauseAll() 
{ 
    // loop through all the playing movieclips ... 
    for (var i = 0; i < playing.length; i ++) 
    { 
     // ... and stop them 
     playing[i].stop(); 
    } 

    // now clear the array 
    playing = []; 
} 
+0

Удивительный, спасибо. Немного утомительно вернуться ко всем моим клипам и добавить каждый из них в игровой массив, но он работает. Но очистка массива должна выходить за пределы цикла for, иначе он будет только приостанавливать первый объект массива. Спасибо, хотя, очень полезно. – dlee2499

+1

Хорошее место! Вот почему вы всегда должны проверять детей! Обновлен пример. –

+0

На самом деле, когда я запускаю несколько клипов одновременно (5 или около того), я получаю вывод: «TypeError: Error # 1010: термин неопределен и не имеет свойств». И не все клипы приостанавливаются. Он также говорит о своей функции паузы. Есть идеи? – dlee2499

0

Существует не встроенный способ, который я знаю, чтобы приостановить все видеоклипы.

Если вы сохранили ссылку на клипы, которые вы хотите приостановить на глобально доступном объекте, вы можете перебирать эти ссылки, вызывающие паузу.

+1

Я все еще относительно новичок в flash, не могли бы вы показать мне пример того, что вы говоря о? Спасибо за быстрый ответ. – dlee2499

0

Эта функция остановит все вложенные MovieClips объекта. Просто перейдите на сцену или класс отображения верхнего уровня, чтобы остановить/воспроизвести все. Таким образом, вам не нужно отслеживать добавление вещей в массив, и нет накладных расходов.

function recursiveStop(parentClip:DisplayObjectContainer, useStop:Boolean = true, gotoFrame:Object = null):void { 
    var tmpClip:MovieClip = parentClip as MovieClip; 
    if (tmpClip) { 
     if (useStop) { 
      (gotoFrame != null) ? tmpClip.gotoAndStop(gotoFrame) : tmpClip.stop(); 
     }else { 
      (gotoFrame != null) ? tmpClip.gotoAndPlay(gotoFrame) : tmpClip.play(); 
     } 
    } 

    var i:int = parentClip.numChildren; 
    while(i--){ 
     if(parentClip.getChildAt(i) is DisplayObjectContainer){ 
      recursiveStop(parentClip.getChildAt(i) as DisplayObjectContainer, useStop, gotoFrame); 
     } 
    } 
} 
+0

Просто обратите внимание, что если у вас есть клипы, которые не отображаются в списке отображения, они не будут затронуты этим методом. – BadFeelingAboutThis

3

Экспорта ваших все символы, которые вы хотите быть приостановлены/возобновлен рекурсивно с базовым классом, как эта, то вам не придется ходить по всему дереву дисплея:

package com.stackoverflow 
{ 
import flash.display.MovieClip; 
import flash.events.Event; 

[Event(name="clipAdded", type="flash.events.Event")] 
[Event(name="clipRemoved", type="flash.events.Event")] 
public class BaseClip extends MovieClip 
{ 
    protected var baseClipChildren:Array; 
    protected var paused:Boolean = true; 

    public function BaseClip() 
    { 
     super(); 
     baseClipChildren = new Array(); 
     addEventListener(Event.ADDED_TO_STAGE, onAdded); 
     addEventListener("clipAdded", onClipAdded); 
     addEventListener(Event.REMOVED_FROM_STAGE, onRemoved); 
     addEventListener("clipRemoved", onClipRemoved); 
    } 

    protected function onAdded(event:Event):void 
    { 
     var target:BaseClip = event.target as BaseClip; 
     if(target == this) { 
      dispatchEvent(new Event("clipAdded", true)); 
     } 
    } 

    protected function onClipAdded(event:Event):void 
    { 
     var target:BaseClip = event.target as BaseClip; 
     if(target && target != this) { 
      event.stopImmediatePropagation(); 
      baseClipChildren.push(target); 
     } 
    } 

    protected function onRemoved(event:Event):void 
    { 
     var target:BaseClip = event.target as BaseClip; 
     if(target == this) { 
      dispatchEvent(new Event("clipRemoved", true)); 
     } 
    } 

    protected function onClipRemoved(event:Event):void 
    { 
     var target:BaseClip = event.target as BaseClip; 
     if(target && target != this) { 
      event.stopImmediatePropagation(); 
      baseClipChildren.splice(baseClipChildren.indexOf(target),1); 
     } 
    } 

    public function stopAll():void { 
     stop(); 
     for each(var clip:BaseClip in baseClipChildren) { 
      clip.stopAll(); 
     } 
    } 

    public function playAll():void { 
     play(); 
     for each(var clip:BaseClip in baseClipChildren) { 
      clip.playAll(); 
     } 
    } 
} 
} 
Смежные вопросы