Flash as3 прослушиватель событий, когда мувиклип останавливается - PullRequest
2 голосов
/ 24 октября 2011

Я думаю о создании мувиклипа, который останавливается в определенных точках (просто с помощью stop (); на определенных ключевых кадрах на временной шкале мувиклипа), затем пользователю предлагается продолжить клип.лучше всего слушать, чтобы остановить клип?Я думаю, что хочу прослушиватель событий, который определяет, когда мувиклип остановлен, но я не знаю, есть ли он.

Большое спасибо

Ответы [ 4 ]

6 голосов
/ 24 октября 2011

Поскольку вам нужно вручную остановить MovieClip с помощью stop(), вы можете легко вручную отправить собственное событие в том же кадре, используя dispatchEvent()

Например, на кадреможет иметь:

stop();
dispatchEvent(
    new Event("movieclip_stopped");
);

И слушатель этого мувиклипа будет:

myMovie.addEventListener("movieclip_stopped", _stopHandler);
function _stopHandler(e:Event):void
{
    trace('mc was stopped');
}
2 голосов
/ 24 октября 2011

есть недокументированная функция, которую вы можете использовать;addFrameScript (функция MovieClip);который, как следует из названия, добавляет код к определенному фрейму.Таким образом, вам не нужен рамочный прослушиватель, и вы можете динамически добавлять код в ключевой кадр.Поэтому, зная, когда мувиклип достигнет своего конца, будет:

mc.addFrameScript(mc.totalFrames - 1, onMcEnded);
function onMcEnded():void {
    trace("last frame of movieclip");
}

, если вы хотите создать мувиклип, который имеет определенные метки, а затем действует на эти метки, один из способов - сделать это следующим образом. (Я думаю, это довольно распространенный код для тех, кто не хочет добавлять код непосредственно на временной шкале)

скажем, вы добавили две метки на временной шкале: askUser1 и askUser2

способдобавить взаимодействие на этих ярлыках было бы так:

for each(var frameLabel:FrameLabel in mc.currentLabels) {
      configureLabel(frameLabel.name,frameLabel.frame-1)                
}

protected function configureLabel(labelName:String,labelFrame:int):void 
{
    switch(labelName) {                 
        case "askUser1" :
                mc.addFrameScript(labelFrame, onAskUser1);
        break;                  
        case "askUser2" :   
                mc.addFrameScript(labelFrame, onAskUser2);
        break;
    }           
}
private function onAskUser1():void{
     //do stuff for askUser1 Label
}
private function onAskUser2():void{
     //do stuff for askUser2 Label
}
1 голос
/ 24 октября 2011

Ужасно хакерское решение - постоянно слушать onEnterFrame:

var isPlaying:Boolean = false;
var lastFrame:int = 0;
addEventListener(Event.ENTER_FRAME, function(event:Event):void
{
    isPlaying = (lastFrame != currentFrame);
    lastFrame = currentFrame;
});

Лучшее решение - отслеживать состояние на основе вашего stop() кода.

0 голосов
/ 07 февраля 2012

Привет user1010076 Я не знаю, как вы получили код от Марти на работу ..

stop();
dispatchEvent(
    new Event("movieclip_stopped");
);

Я попытался, а затем нашел этот лайнер из Введение в обработку событий в ActionScript 3.0

target.dispatchEvent(new Event("type"));

Итак, чтобы весь код Марти работал, вам понадобится ..

myMovie.dispatchEvent(new Event("movieclip_stopped"));

У меня есть сценарий использования, аналогичныйваш и код теперь работает с добавленной «целью», а я без нее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...