2012-05-18 4 views
2

Я был бы очень благодарен, если вы поможете мне с этой проблемой. Я пытаюсь воспроизвести в своем приложении для ipad one MovieClip один раз. я пытался сделать остановку в этом пути, но фильм не остановитьas3 play movieclip once

var loader:Loader = new Loader(); 
var swfFile:URLRequest= new URLRequest("/test.swf"); 
loader.load(swfFile); 

movieClip = new MovieClip(); 
movieClip.addChild(loader); 
movieClip.addFrameScript(movieClip.totalFrames - 1, callbackFunc); 
movieClip.play(); 
private function callbackFunc():void 
{ 
movieClip.stop(); 
} 
+0

Хм. Что вы ожидали от «нового MovieClip()»? Он имеет 1 пустой кадр и ничего не может играть. Обратные вызовы, добавленные 'addFrameScript()', запускаются так, как будто их код был просто записан внутри указанного фрейма. –

+0

Вкратце: ваш 'movieClip' не имеет фреймов для добавления скрипта. Попробуйте 'trace (movieClip.currentFrame);' который выведет '0', обратите внимание, что' movieClip.currentFrame' для MovieClips, созданных во время разработки, всегда больше 0. –

ответ

2
var loader:Loader = new Loader(); 
var swfFile:URLRequest= new URLRequest("/test.swf"); 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onFileLoaded); 
loader.load(swfFile); 

//I assume you have declared 'movieClip'? 
//if not do: 
//var movieClip:MovieClip; 


private function onFileLoaded(e:Event):void 
{ 
    movieClip = loader.content; 
    addChild(movieClip); 
    movieClip.play(); 
    addEventListener(Event.ENTER_FRAME, onEnter, true, 0, false); 
} 

private function onEnter(e:Event):void 
{ 
    if (movieClip.currentFrame == movieClip.totalFrames) 
    { 
     movieClip.stop(); 
     removeEventListener(Event.ENTER_FRAME, onEnter, true, 0, false); 
     //do other stuff 
    } 
} 

Это должно делать то, что вам нужно.

2
var loader:Loader = new Loader(); 
var swfFile:URLRequest= new URLRequest("/test.swf"); 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler); 
loader.load(swfFile); 

private function callbackFunc():void 
{ 
    movieClip.stop(); 
} 

function onCompleteHandler(loadEvent:Event) 
{ 
    movieClip = MovieClip(loadEvent.currentTarget.content); 
    addChild(movieClip); 

    movieClip.addFrameScript(movieClip.totalFrames - 1, callbackFunc); 
    movieClip.play(); 
} 
2

Ваш код не будет работать, потому что это не в movieClip, который проигрывается, это внешний SWF, который загружается в него, что будет играть это ключевые кадры. Созданный movieClip имеет только 1 ключевой кадр, а на этом 1 ключевом кадре размещен внешний SWF. Вы должны добавить функцию stop() во внешний SWF. Если вы сделаете это правильно, внешний SWF будет воспроизводиться один раз и затем будет остановлен.

Вы также можете обернуть внешний SWF в новый мувиклип и поместить код, который вы уже имеете на него ...

Или Если вы хотите иметь полный контроль, вы можете адаптировать внешний SWF-код так, чтобы это Передает событие, когда воспроизводится последний кадр. Предоставьте пользовательскую функцию остановки/воспроизведения в SWF, которую вы можете вызвать из родительского SWF.

Удачи вам!