2010-06-09 15 views
3

Je veux juste savoir s'il est possible de mettre en pause un fichier SWF en lecture dans Adobe Flex? J'ai un chargeur SWF et il joue mon fichier SWF mais il n'a aucune capacité (ou fonction intégrée) qui met le fichier en pause.Est-il possible d'interrompre la lecture d'un fichier SWF dans Adobe Flex? Comment?

Quelqu'un peut-il m'aider s'il vous plaît? J'apprécierai un code pour commencer. :) Merci d'avance.

+0

est le fichier SWF fait dans Action Script 2.0 ou 3.0? – phwd

+0

cela se fait dans ActionScript 3.0. J'ai essayé de créer une instance d'un clip et d'assigner mon SWF dans le clip en le lançant en tant que tel, mais cela ne semble pas fonctionner. J'ai aussi essayé d'utiliser Loader mais ça ne marche pas aussi bien. Merci pour la réponse. – Kim

Répondre

1

Vous pouvez utiliser le stop();

Voici un exemple d'un jeu de swf et de contrôle est donnée à la lecture et pause et boutons gotoAndStop.

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" 
       minWidth="955" minHeight="600"> 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 

    <fx:Script> 
     <![CDATA[ 
      private function playHandler():void { 

       var file_mc:MovieClip = fileswf.content as MovieClip; 
       file_mc.play(); 

      } 

      private function pauseHandler():void { 

       var file_mc:MovieClip = fileswf.content as MovieClip; 
       file_mc.stop(); 
      } 

      private function pauseat(frame:Number):void { 

       var file_mc:MovieClip = fileswf.content as MovieClip; 
       file_mc.gotoAndStop(frame); 
      } 

     ]]> 
    </fx:Script> 


    <mx:SWFLoader x="0" y="0" source="abc.swf" id="fileswf"/> 
    <s:Button x="0" y="200" label="Play" id="playbtn" click="playHandler()"/> 
    <s:Button x="100" y="200" label="Pause" id="pausebtn" click="pauseHandler()"/> 
    <s:Button x="100" y="250" label="Pause at A" id="pauseAbtn" click="pauseat(1)"/> 
    <s:Button x="200" y="250" label="Pause at B" id="pauseBbtn" click="pauseat(2)"/> 
    <s:Button x="300" y="250" label="Pause at C" id="pauseCbtn" click="pauseat(3)"/> 
    <s:Button x="400" y="250" label="Pause at D" id="pauseDbtn" click="pauseat(4)"/> 
    <s:Button x="500" y="250" label="Pause at E" id="pauseEbtn" click="pauseat(5)"/> 

</s:Application> 

Pour être complet, je l'ai placé dans la méthode de @Embed (il est impossible d'obtenir le swf d'origine directement via SWFLoader [runtime vs compilation] mais vous pouvez vous permettre de charger les octets d'une classe)

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" 
       minWidth="955" minHeight="600" addedToStage="init()"> 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 

    <fx:Script> 
     <![CDATA[ 

      [Embed(source="abc.swf", mimeType="application/octet-stream") ] 
      public var abc_cls:Class; 

      public var ldr:Loader = new Loader(); 

      private var file_mc:MovieClip; 

      protected function init():void 
      { 
       ldr.loadBytes(new abc_cls() as ByteArray); 
       ldr.contentLoaderInfo.addEventListener(Event.INIT, onSwfLoaded); 
       swfcontainer.addChild(ldr); 
      } 

      private function onSwfLoaded(e:Event):void { 
       file_mc = ldr.content as MovieClip; 
      } 

      private function playHandler():void { 

       file_mc.play(); 

      } 

      private function pauseHandler():void { 

       file_mc.stop(); 
      } 

      private function pauseat(frame:Number):void { 


       file_mc.gotoAndStop(frame); 
      }  

     ]]> 
    </fx:Script> 


    <mx:Image id="swfcontainer" /> 
    <s:Button x="0" y="200" label="Play" id="playbtn" click="playHandler()"/> 
    <s:Button x="100" y="200" label="Pause" id="pausebtn" click="pauseHandler()"/> 
    <s:Button x="100" y="250" label="Pause at A" id="pauseAbtn" click="pauseat(1)"/> 
    <s:Button x="200" y="250" label="Pause at B" id="pauseBbtn" click="pauseat(2)"/> 
    <s:Button x="300" y="250" label="Pause at C" id="pauseCbtn" click="pauseat(3)"/> 
    <s:Button x="400" y="250" label="Pause at D" id="pauseDbtn" click="pauseat(4)"/> 
    <s:Button x="500" y="250" label="Pause at E" id="pauseEbtn" click="pauseat(5)"/> 

</s:Application> 

Je suis sûr maintenant qu'il est l'intégration, qui donnait le problème désolé pour tout risque de confusion. Donc, si vous avez besoin de votre swf dans le cadre de votre fichier ci-dessous devrait le tour. La dernière façon d'obtenir des ressources dans votre espace de travail flexible consiste à utiliser SWC Assets Method.

Bonne chance! : D

+0

oui je peux utiliser la fonction stop() mais elle arrête tout le fichier SWF en cours de lecture. Ce dont j'ai vraiment besoin, c'est de faire une pause puis après avoir cliqué sur le bouton de lecture, il va juste reprendre là où il jouait juste avant qu'il ne soit en pause. Merci pour le code. :) – Kim

+0

Si la chronologie est basée, vous pouvez avoir besoin de gotoAndStop (dernière image); Est-ce basé sur le calendrier? – phwd

+0

désolé mais je pense que cela va sembler stupide. Je ne sais pas vraiment à ce sujet puisque je suis vraiment nouveau à l'utilisation de flex. J'essaie le code que vous avez collé ci-dessus et au chargement de la page, il lit automatiquement le fichier swf, donc je n'ai pas vraiment besoin de rollover/rollout. plus, j'ai dû changer le en pour une raison particulière que je ne sais vraiment pas. J'espère que tu peux m'aider. Merci. – Kim