Просмотр полной версии : Flex: остановить проигрывание SWF
Есть такой код
[Embed(source="../image/floor.swf")]
private var prisonFloor:Class;
// тут запускаем swf
var floorClip:MovieClip = MovieClip(new prisonFloor());
gateFloor.source = floorClip;
floorClip.play();
как остановить проигрывание swf. Нужно именно программно остановить, что-то типа: если дошли до последнего кадра - остановить.
Подписаться на enterFrame, посчитать кадры и остановить.
wvxvw, думаю я правильно понял. Вот я добавил, но работать не хочет. В чем ошибка?
floorClip.addEventListener(Event.ENTER_FRAME, checkFrm);
public function checkFrm(event:Event):void {
if (event.target.currentFrame == event.target.totalFrames) {
event.target.stop();
}
}
Ну, может проигрывается не основная шкала клипа, а какой-то из вложеных... это уже у дизайнера надо спрашивать :)
также я думаю у меня не происходит реакции на addEventListener
если в checkFrm добавить только строку event.target.stop(); , то swf все равно не останавливается
Добавлено через 1 минуту
wvxvw, так дело в том, что я все сам делаю (честно говоря не очень в этом соображаю, у меня профиль PHP)
Слой у меня во Flash одни. К примеру если запустить Flash и просто наделать фреймов и сохранить - вот в принципе моя анимация и есть, ни каких там вложенностей или чего-то хитрого нет
Добавлено через 52 минуты
еще одно, если сделать алерт
Alert.show(floorClip.totalFrames.toString());
выводит почему-то ноль...
Добавлено через 1 час 48 минут
быть может я неправильно сделал SWF?
Файл делал во Flash 5. Насоздавал фреймов, потом сделал Export Movie и получил SWF.
Ого... пятый флеш... а где вы его взяли? :) или в смысле CS5 - хотя тоже, это ж еще закрытая бета, у меня его еще нет... :) Я думаю, что флексовый компилятор не проверяли на совместимость с такими старыми версиями... это ж было на заре человечества, году так в 2000... а может и раньше :)
В смысле, текущая версия флеша - 10, на подходе - 11.
именно Flash 5 :) другого под рукой не было. Т.е вполне возможно, что проблема именно в нем? ладно для начала найдем по-новее
Добавлено через 7 часов 12 минут
установил Flash CS3. в нем экспортировал swf. проблема таже.
В одном месте подсказали: AVM - разные.
Толком не могу понять что это значит, и как состыковать это
Добавлено через 8 часов 39 минут
вернее будет: посоветуйте на какие моменты обращать внимание, чтобы избежать таких вот нестыковок
AVM - ActionScript Virtual Machine, их есть две AVM1 и AVM2. AVM1 - это ActionScript 1 - 2, AVM2 - ActionScript 3. Если вы загружаете флешку скомпилированую для AVM1 в AVM2, то она там видится как AVM1Movie (который не является наследником MovieClip), и у него нет свойств типа currentFrame или методов nextFrame() / gotoAndPlay() и т.п.
Если в AVM1Movie нету никаких скриптов, его проще переделать в AVM2 - нужно будет распарсить его и заменить версию. Если в нем есть скрипты, тогда вам прийдется делать обертку на AS2 и из этой обертки общаться через LocalConnection с загруженым клипом. Второй вариант я когда-то делал:
http://code.google.com/p/e4xu/source/browse/#svn/trunk/as2
+
http://code.google.com/p/e4xu/source/browse/#svn/trunk/src/org/wvxvws/lcbridge
или
http://e4xu.googlecode.com/files/avm1bridge.zip
Первый вариант:
http://code.google.com/p/as3-classes/source/browse/trunk/org/lzyy/util/ForcibleLoader.as
Но проще всего - не работать со старыми SWF :)
wvxvw, спасибо за ответ. Просветился немного
но по чему так все сложно... ))
ну суть я вроде уловил. Получается, что у меня SWF поддерживает AVM1, и при подгрузке данного файла во Flex - теряются все его свойства. Следовательно нужно скомпилировать Swf под AVM2, тогда и отпадет потребность в переконвертировании AVM1 в AVM2, парсинг и т.д.
Я так полагаю что у Flash CS4 должна быть такая возможность - компилить SWF под AVM2. Если да, то как?
>> Я так полагаю что у Flash CS4 должна быть такая возможность - компилить SWF под AVM2. Если да, то как?
Ctrl + Shift + F12 > Flash > ActionScript Version > выбрать Action Script 3.
да, я так и делал, выставля там Action Script 3, Flash Player 10 (и 9 тоже) - эффект тотже..
немало времени прошло, но все-таки вернулся к этому проекту и разобрался с этой частью
Скомпилировал swf файл в Adobe Flash CS4
указал там Player: Flash Player 10 и Script: Action Script 3
ну и вот фрагмент кода, как все это выглядит во Flex
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
private var swfUrl:String = "http://localhost/dance.swf";
private var swfClip:MovieClip;
private var loader:Loader = new Loader();
private function init():void {
var request:URLRequest = new URLRequest(swfUrl);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
loader.load(request);
}
private function completeHandler(event:Event):void {
swfClip = loader.content as MovieClip;
myLoader.source = swfClip;
swfClip.addEventListener(Event.ENTER_FRAME, showFrames);
}
private function showFrames(ev:Event):void {
Alert.show(ev.target.totalFrames.toString());
swfClip.removeEventListener(Event.ENTER_FRAME, showFrames);
}
]]>
</mx:Script>
<mx:Image id="myLoader" creationComplete="init();"/>
</mx:Application>
спасибо wvxvw, за наводки
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.