J'ai besoin de lire des fichiers SWF dans mon projet. Ces fichiers SWF contiennent de la musique de fond. Les options Sound Sync de cette musique dans Flash sont définies sur "stream". Ceci est fait de sorte que si vous mettez en pause le film Flash, la musique sera également mise en pause.SWFLoader commence à jouer SWF sans que le chargement soit terminé
Maintenant, j'ai un problème lorsque je charge ces fichiers SWF. Pour cela, j'utilise un SWFLoader.
Lorsque je le charge, l'audio du fichier SWF commence déjà à être lu, mais aucun visuel du film n'est affiché pendant un certain temps. Plus la connexion est lente, plus la durée d'affichage des visuels du film est longue. Les sons et les images sont synchronisés, ce qui est bien, mais les premières images du film flash ne sont tout simplement pas affichées.
J'ai essayé de résoudre ce problème en ajoutant un eventListener pour m'assurer que le film est complètement chargé avant qu'il ne commence à jouer. Cependant, quand je fais cela (code ci-dessous), pendant une fraction de seconde la musique joue, puis s'arrête et redémarre lorsque le film est complètement chargé.
Quelle est la meilleure façon de résoudre ce problème? Suis-je sur la bonne voie avec l'eventlistener de ProgressEvent.PROGRESS?
Certains code:
private function loadSWF():void
{
swfLoader.source = source;
swfLoader.addEventListener(ProgressEvent.PROGRESS, loadProgress);
swfLoader.addEventListener(Event.COMPLETE, startSWF);
swfLoader.load();
var soundTransform:SoundTransform = new SoundTransform(0);
swfLoader.soundTransform = soundTransform;
}
private function loadProgress(event:ProgressEvent):void
{
applicationModel.addToConsoleOutput("SWFPlayer.loadProgress(): " + event.bytesLoaded + " of " + event.bytesTotal + "bytes loaded");
if (MovieClip(swfLoader.content) && event.bytesLoaded < event.bytesTotal)
{
MovieClip(swfLoader.content).gotoAndStop(0);
var soundTransform:SoundTransform = new SoundTransform(0);
swfLoader.soundTransform = soundTransform;
}
}
private function startSWF(event:Event):void
{
swfLoader.removeEventListener(ProgressEvent.PROGRESS, loadProgress);
swfLoader.removeEventListener(Event.COMPLETE, startSWF);
dispatchEvent(new Event("loadComplete", true));
var soundTransform:SoundTransform = new SoundTransform(volume);
swfLoader.soundTransform = soundTransform;
cardMovieClip = MovieClip(swfLoader.content);
cardMovieClip.addEventListener(Event.ENTER_FRAME, endSWFHandler);
cardMovieClip.gotoAndPlay(0);
}
Ok, qui semble fonctionner OK et est une bonne solution. Merci pour cela, je vais implémenter cela dans les FLAs que j'ai jusqu'ici. Cependant, la plupart du contenu SWF est fourni par plusieurs fournisseurs de contenu différents. Donc, si cela est possible, je préférerais le traiter complètement dans l'application Flex, plutôt que d'avoir les fournisseurs pour mettre cela dans le code comme je le ferai, plutôt que d'avoir moins de contrôle sur celui-ci. Donc, s'il y a une solution Flex, s'il vous plaît aider;) – Bocaxica
je modifier ma réponse avec une autre façon de procéder – Patrick
Salut Patrick, j'ai mis en œuvre le URLLoader et loadBytes() comme vous le suggérez ci-dessus, mais maintenant je ne peux pas appeler toutes les fonctions à l'intérieur du MovieClip qui a été chargé, ni je peux définir la hauteur et la largeur du MovieClip. Savez-vous si je peux encore le faire et comment? – Bocaxica