Forums Développement Multimédia

Aller au contenu

Communication de fonction entre Animation principale et SWF chargé dynamiquement

CODE Actionscript

4 réponses à ce sujet

#1 etienne

    Ceinture Blanche

  • Members
  • Pip
  • 6 messages

Posté 26 November 2008 - 11:38 AM

Bonjour à tous,

Étant novice en AS3, j'aurais besoin de la lumière de vos conseils concernant mon projet.

Je réaliser une sorte de slideShow. Un animation principale charge dynamique des SWF externe. (via Load)
Le système de navigation entre les slides est positionné dans l'animation principal (bouton précedent et suivant)
Mon besoin est de pouvoir a partir de mes swf de slide controler mon système de navigation principale afin de changer de slide pour aller vers un slide spécifique.

Comment dois je faire pour que mon SWF chargé appel une fonction de l'animation principal avec en paramètre le numéro de mon slide?

Merci de votre attention et j'espère que vous avez une solution ^_^

Etienne

#2 Logic

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 2733 messages

Posté 26 November 2008 - 11:40 AM

Salut.

La méthode propre : dispatchEvent !

Edit: et ça tombe bien, t'as un sujet tout frais avec un exemple de dispatchEvent ici : http://flash.mediabox.fr/index.php?showtopic=91491

Modifié par Logic, 26 November 2008 - 11:42 AM.


#3 etienne

    Ceinture Blanche

  • Members
  • Pip
  • 6 messages

Posté 26 November 2008 - 15:36 PM

J'ai lu et relu le post que tu m'as proposé et je reste perplexe car je ne comprend pas vraiment.

Dans mon cas, le SWF qui est chargé est une animation et mon idée est de positionner dans celle-ci un bouton a un moment donné qui au clic renverra à l'animation principale le fait de changer de Slide et allez à un slide précifique.

Peut être avec le code cela sera plus compréhensible.

L'animation principale:

Action Script


package utils.document
{
import flash.display.MovieClip;
import flash.display.SimpleButton;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.net.URLRequest;
import fl.transitions.Tween;
import fl.transitions.easing.Strong;
import utils.chargement.ChargeurMedia;

public class Document extends MovieClip
{
private var viewer:ChargeurMedia;
private var tableauimage:Array;
private var position:int;
private var requete:URLRequest;
private var prechargeur:Prechargeur;
private var fondu:Tween;

public function Document()
{
trace (this);
viewer = new ChargeurMedia(1024,768, true);
tableauimage = new Array("planches/accueil.swf", "planches/1.swf", "planches/2.swf", "planches/3.swf", "planches/4.swf", "planches/5.swf");
addChildAt(viewer,0);

prechargeur = new Prechargeur();
prechargeur.x = int ((stage.stageWidth - viewer.width) / 2);
prechargeur.y = int ((stage.stageHeight - viewer.height) / 2);
addChild(prechargeur);

position = -1;
requete = new URLRequest();

fondu = new Tween(viewer, "alpha", Strong.easeOut, 1, 1, 0, true);

bt_predecent.addEventListener(MouseEvent.CLICK, clickprecedent);
bt_suivant.addEventListener(MouseEvent.CLICK, clicksuivant);

viewer.addEventListener(Event.COMPLETE, loadComplete);
viewer.addEventListener(ProgressEvent.PROGRESS, progressComplete);
clicksuivant();
}

private function clickprecedent (evt:MouseEvent):void
{
fondu.continueTo(0, 1);
position = Math.max(0, --position);
requete.url = tableauimage[position];
trace ("Position : " +position);
viewer.load(requete);

}

private function clicksuivant (evt:MouseEvent=null):void
{
fondu.continueTo(0, 1);
position = ++position % tableauimage.length;
requete.url = tableauimage[position];
trace ("Position : " +position);
viewer.load(requete);
}

private function loadComplete (evt:Event):void
{
viewer.x = int ((stage.stageWidth - viewer.width) / 2);
viewer.y = int ((stage.stageHeight - viewer.height) / 2);
fondu.continueTo(1, 1);
prechargeur.alpha = 0;
}

private function progressComplete(evt:ProgressEvent):void
{
prechargeur.alpha = 1;
//prechargeur.scaleX = evt.bytesLoaded / evt.bytesTotal;
}
}
}


Le chargeur de média (de Slide) :

Action Script


package utils.chargement
{
import flash.display.Bitmap;
import flash.display.DisplayObject;
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.ProgressEvent;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.net.URLRequest;
import flash.system.LoaderContext;

public class ChargeurMedia extends Sprite
{
private var chargeur:Loader = new Loader();
private var cli:LoaderInfo = chargeur.contentLoaderInfo;
private var largeur:Number;
private var hauteur:Number;
private var lissage:Boolean;

public function ChargeurMedia(larg:Number, haut:Number, lis:Boolean)
{

addEventListener(Event.ADDED_TO_STAGE, activation)
addEventListener(Event.REMOVED_FROM_STAGE, deactivation)

trace ("Chargeur Media crée");
addChild(chargeur);
largeur = larg;
hauteur = haut;
lissage = lis;
}

public function handlerComplete (evt:Event):void
{
var contenuCharge:DisplayObject = evt.target.content;

if (contenuCharge is Bitmap)
{
Bitmap(contenuCharge).smoothing = lissage;
}

var ratio:Number = Math.min(largeur /contenuCharge.width, hauteur/contenuCharge.height);
trace("Ratio " + ratio);
scaleX = scaleY = 1;
if (ratio < 1)
{
scaleX = scaleY = ratio;
}
dispatchEvent(evt);
}

public function handlerEvt (evt:Event):void
{
dispatchEvent(evt);
trace(evt);
}

public function load (url:URLRequest, context:LoaderContext=null):void
{
chargeur.load(url, context);
}

public function activation (evt:Event):void
{
cli.addEventListener(Event.INIT, handlerEvt);
cli.addEventListener(Event.OPEN, handlerEvt);
cli.addEventListener(Event.COMPLETE, handlerComplete);
cli.addEventListener(IOErrorEvent.IO_ERROR, handlerEvt);
cli.addEventListener(ProgressEvent.PROGRESS, handleProgress);
}

public function deactivation (evt:Event):void
{
cli.removeEventListener(Event.INIT, handlerEvt);
cli.removeEventListener(Event.OPEN, handlerEvt);
cli.removeEventListener(Event.COMPLETE, handlerComplete);
cli.removeEventListener(IOErrorEvent.IO_ERROR, handlerEvt);
cli.removeEventListener(ProgressEvent.PROGRESS, handleProgress);
}

public function handleProgress (evt:ProgressEvent):void
{
dispatchEvent(evt);
}

public function close():void
{
chargeur.close();
}
}
}


#4 Logic

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 2733 messages

Posté 26 November 2008 - 16:14 PM

Bah au moment du clic, ton anim dispatchera un event. Ton SWF chargeur n'aura qu'à écouter cette event pour se tenir au courant.

#5 etienne

    Ceinture Blanche

  • Members
  • Pip
  • 6 messages

Posté 09 December 2008 - 11:15 AM

Citation (Logic @ Nov 26 2008, 04:14 PM) Voir le message
Bah au moment du clic, ton anim dispatchera un event. Ton SWF chargeur n'aura qu'à écouter cette event pour se tenir au courant.


Merci pour tes réponses j'ai enfin pu comprendre (avec pas mal de mal je te l'accorde)

dispatcher des event ce n'est si compliqué mais encore fallait il que je comprenne comment le formuler!

Ainsi mon swf loadé dispatch un event simple :

Action Script

dispatchEvent(new Event('monEvenement');

et mon animation principale l'écoute:

Action Script

addEventListener('monEvenement', maFonction);

Simple mais je n'avais pas trouvé encore.

Merci à toi!




1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)