IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDI/Outils Discussion :

[newbie] Manipuler un swf depuis Flex builder 2


Sujet :

EDI/Outils

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 12
    Points : 6
    Points
    6
    Par défaut [Résolu] Manipuler un swf depuis Flex builder 2
    Bonjour,

    Je suis très content de découvrir ce forum en tant que grand débutant sur Flex et inévitablement je me heurte à un grand nombre d'interrogations.

    En fait, je souhaite manipuler un swf (flash9 et sans actionscript, la timeline ne comportant qu'une seule image) depuis Flex Builder 2.0.1.
    Ce SWF est une carte de France où chaque département est un symbole clip avec un nom d'occurrence.

    J'importe le swf sans souci à l'aide de SWFLoader mais je souhaiterai pouvoir travailler sur les propriétés de chaque clip département (ex: je clique sur un bouton et je modifie la propriété alpha du département 75).

    Quel code AS3 est nécessaire ?

    Désolé pour la trivialité de ma question mais il faut bien commencer un jour...

    Merci et bonne journée

  2. #2
    Candidat au Club
    Inscrit en
    Août 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Si le SWF ne comporte pas de code actionscript qui lui permet de recevoir un paramètre, alors, oublies, ce n'est pas possible.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Et quel est le code AS3 à insérer sur mon swf créé avec Flash CS3 lui permettant de recevoir des paramètres de Flex?

    Merci

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    La classe LocalConnection m'a permis de jouer sur les propriétés des clips du swf créé avec Flash.

    Par contre, je dispose de Flash CS3, qui a priori peut exporter en flash9, et j'avais cru comprendre que Localconnection était nécessaire pour les swf flash8 mais pas pour flash9.

    Y'a t'il une méthode plus appropriée pour les swf flash 9 ?

  5. #5
    Membre habitué
    Homme Profil pro
    Creative Technologist
    Inscrit en
    Avril 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Creative Technologist

    Informations forums :
    Inscription : Avril 2007
    Messages : 126
    Points : 174
    Points
    174
    Par défaut Contrôler un SWF dans FLEX, c'est possible
    Si, en fait c’est tout à fait possible (ç'aurait été surprenant !...). Il faut que tu connaisses le chemin de tes clips à partir du Stage (une propriété qui existe pour tous les objets posés sur la scène, regarde la doc).

    Un des moyens, consiste à créer une petite méthode récursive qui parse le Stage et ses enfants, ce qui te permet de connaître le chemin de chaque clip, et de comprendre ce qui se passe. Je fais toujours ça quand j’ai perdu un clip.

    La subtilité vient du fait que ton script est contenu dans un clip qui est au même niveau que ce que tu as posé avec l’outils de design, ce qui signifie qu’il faut redescendre d’un cran dans la hiérarchie graphique, c'est-à-dire utiliser this.parent.

    Je t’ai fait un script vite fait, essaye de le comprendre. Il y a deux méthodes qui sont employées. L’une, pose un SWF sur la scène via l’outil design de Flex (object SWFsurScene), l’autre charge dynamiquement un SWF depuis un fichier.
    Dans la console, tu verras tous les contenus de tes clips, tracés par la méthode de parsing recursChildren (chaque enfant est précédé d’un +) . Note que quand aucun nom n’a été spécifié, Flex attribue un nom du type "instance ??".

    Ensuite, deux méthodes te proposent de référencer la racine de ton SWF. L’une pour le clip chargé, l’autre pour le clip posé.

    Pour l’exemple, j’ai juste fait un FLA avec trois symboles (MovieClip) posés sur la scène, avec comme noms d’occurrences, clipA, clipB, clipC. Puis j’ai compilé le SWF.

    Tu noteras que j’ai profité de la méthode de parsing pour intercepter les clips dont j’avais besoin grâce à leur nom, et les rediriger vers une méthode (qui fait ce que tu veux).

    le code mxml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?xml version="1.0" encoding="utf-8"?>
    	<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
    	xmlns:Script="*"
    	frameRate = "50"
    	pageTitle = "Modèle"
    	layout="absolute" width="1250" height="810">
    <Script:TestMain id="engineContainer" creationComplete="engineContainer.init()"/>
    		<mx:SWFLoader x="54" y="340" source="TestSwfDansFlex.swf" id="SWFonStage"/>
    </mx:Application>
    le code du fichier TestMain.as:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    package
    {
    	import mx.core.UIComponent;
    	import flash.events.Event;
    	import flash.display.Loader;
    	import flash.net.URLRequest;
    	import flash.utils.getQualifiedClassName;
    	import flash.display.MovieClip;
    	import flash.events.MouseEvent;
     
    	public class TestMain extends UIComponent
    	{
    		public var loader:Loader;
     
    		public function init():void {
    			loader = new Loader();
    			loader.contentLoaderInfo.addEventListener("init", onLoad);
    			loader.contentLoaderInfo.addEventListener("ioError", onError);
    			loader.load(new URLRequest("TestSwfDansFlex.swf"));
    		} // end constructor
     
    		public function onLoad(aEvent:Event):void {
    			trace("Fichier chargé");
    			//aEvent.target.content.name = "SWFloaded";
    			this.addChild(aEvent.target.content);
     
    			trace("Parsing des éléménts disposés sur le Stage:\n");
    			recursChildren(this.stage, 0, "");
     
    			var myRoot1:* = loader.contentLoaderInfo.content;
    			var myRoot2:* = this.parent["SWFonStage"].content;
     
    			trace("Vérification 1: "+myRoot1.clipA.x);
    			myRoot1.clipA.alpha = .5;
     
    			trace("Vérification 2: "+myRoot2.clipB.x);
    			myRoot2.clipB.alpha = .5;
    		} // end onLoad
     
    		public function onError(aEvent:Event):void {
    			trace("Erreur de chargement");
    		} // end onError
     
    		public function recursChildren(aContainer:*, aRank:uint, aPath:String):void {
    			var tab:String = ("                    ").substr(0, (aRank+1)*3);
    			trace(tab+"Analyse de l'objet: "+aContainer.name+", type "+getQualifiedClassName(aContainer)+", chemin: "+aPath);
    			var nChildren:uint;
    			try {nChildren = aContainer.numChildren} catch (a:*) {
    				trace(tab+"Cet objet: "+aContainer.name+" n'est pas un DisplayObjectContainer.");
    				return;
    			}
    			for (var u:uint=0; u<nChildren; u++) {
    				trace(tab+" +"+aContainer.getChildAt(u).name+" --> "+getQualifiedClassName(aContainer.getChildAt(u)));
    				switch (aContainer.getChildAt(u).name) {
    					case "clipA":	getClip(aContainer.getChildAt(u));	break;
    					case "clipB":	getClip(aContainer.getChildAt(u));	break;
    					case "clipC":	getClip(aContainer.getChildAt(u));	break;
    				}
    				recursChildren(aContainer.getChildAt(u), aRank+1, aPath+"."+aContainer.getChildAt(u).name);
    			}
    		} // end recursChildren
     
    		public function getClip(aClip:MovieClip):void {
    			aClip.addEventListener("mouseDown", clipMouseDown);
    			aClip.addEventListener("mouseUp", clipMouseUp);
    		} // end getClip
     
    		public function clipMouseDown(aEvent:MouseEvent):void {
    			trace("Souris DOWN sur le clip: "+aEvent.target.name);
    			aEvent.target.alpha -= .4;
    		} // end clipMouseDown
     
    		public function clipMouseUp(aEvent:MouseEvent):void {
    			trace("Souris UP sur le clip: "+aEvent.target.name);
    			aEvent.target.alpha += .4;
    		} // end clipMouseUp
     
    	} // end class
    } // end package
    Voili voilo !
    Bon courage !

  6. #6
    Membre habitué
    Homme Profil pro
    Creative Technologist
    Inscrit en
    Avril 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Creative Technologist

    Informations forums :
    Inscription : Avril 2007
    Messages : 126
    Points : 174
    Points
    174
    Par défaut
    Mouais...

    on pourrait même améliorer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    switch (aContainer.getChildAt(u).name) {
    	case "clipA":	getClip(aContainer.getChildAt(u));	break;
    	case "clipB":	getClip(aContainer.getChildAt(u));	break;
    	case "clipC":	getClip(aContainer.getChildAt(u));	break;
    }
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (aContainer.getChildAt(u).name.indexOf("clip")>-1) {
    	getClip(aContainer.getChildAt(u));
    }
    si tu as beaucoup de clips... tu vas pas faire un case par département...

    ps. si ça marche, oublie pas de répondre avec le tag [Résolu]

  7. #7
    Membre habitué
    Homme Profil pro
    Creative Technologist
    Inscrit en
    Avril 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Creative Technologist

    Informations forums :
    Inscription : Avril 2007
    Messages : 126
    Points : 174
    Points
    174
    Par défaut
    Ha et encore, jète un oeil au tutoriel
    http://iteratif.developpez.com/artic.../architecture/

    et puis t'es pas trop dans le bon forum... c'est plutôt une question d'AS3

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 12
    Points : 6
    Points
    6
    Par défaut [Résolu] Manipuler un swf depuis Flex builder 2
    Merci beaucoup d'avoir pris la peine de me répondre de façon aussi détaillée et explicite.

    C'est exactement les infos que je recherchais.
    Tu viens de me faire gagner un temps fou ;-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Manipuler un SWF avec Flex
    Par MetalFox dans le forum EDI/Outils
    Réponses: 3
    Dernier message: 09/12/2009, 18h32
  2. Flex Builder 2 et NetBeans ?
    Par martel dans le forum NetBeans
    Réponses: 2
    Dernier message: 05/08/2009, 18h11
  3. Lire swf depuis le disque dur, cache: possible ?
    Par c13303 dans le forum Flash
    Réponses: 2
    Dernier message: 18/11/2006, 19h45
  4. Réponses: 6
    Dernier message: 07/09/2005, 21h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo