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

ActionScript 3 Discussion :

swf dans ScrollPane faudrait qu'ça cause !


Sujet :

ActionScript 3

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7
    Par défaut swf dans ScrollPane faudrait qu'ça cause !
    Bonjour,

    Je charge un fichier swf (detail.swf) dans le ScrollPane d'un autre fichier SWF. (general.swf)

    Donc j'ai general.swf qui charge detail.swf.

    Bon, je voudrais que detail.swf puisse aller récupérer une information dans general.swf ou
    que general.swf envoie une info à detail.swf.

    Les variable _global n'existent plus en AS3.
    J'ai essayé en remontant avec parent... comme je le faisait en AS2 (_parent) mais ça veut pas.
    Je me suis amusé avec LocalConnection() mais sans résultat...

    Je sais pas quoi faire, et je voudrais juste récupérer le contenu d'une variable.

    Si qq'un à une idée, je suis preneur,

    MERCI

    Raydu

  2. #2
    Membre expérimenté
    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
    Par défaut
    Si tu vois ton swf à l'écran, c'est qu'il est chargé. Y'a pas de raison, que tu puisses pas reconstruire le chemin de ta variable avec parent.

    Mais tu as écrit _parent ??... c'est un code AS2...

    T'es en AS2 ou AS3?

    Sinon, pour l'AS3, on avait discuté d'un problème similaire à:
    http://www.developpez.net/forums/sho...d.php?t=400454

    tu trouveras entre autre une méthode qui te permet de reconstruire le chemin de tes clips.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7
    Par défaut
    Merci pour ta réponse,

    Je suis en AS3, et je suis bien passe par parent.

    j'ai commencé à regardé le lien que tu m'as fournis et ça à l'air de le faire !

    MERCI

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7
    Par défaut
    Bon, un p'tit point avant d'aller se coucher...
    Parce que j'y suis pas encore ! Vraiment pas.
    J'ai essayé deux méthodes.

    1) La première charge le fichier au bon endroit mais je ne peux pas accéder à ce que je veux,
    2) La seconde je peux accéder à ce que je veux, mais le fichier ne se charge pas dans le scrollPan

    Méthode 1 :

    Action Script :

    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
     
    // un p'tit ScrollPan 
    var sp:ScrollPane = new ScrollPane(); 
    sp.move(10,190); 
    sp.name = "leScroller"; 
    sp.setSize(530,400); 
    addChild(sp); 
     
    function swfCharge(e:Event):void 
    { 
       // C'est là que je m'en sort pas, car je voudrais exécuté 
       // une fonction  dans le fichier chargé en lui 
       // passant une valeur à partir de CE fichier...  
       // mais je n'arrive pas à attreindre ma fonction, 
       // je n'ai que des erreurs. 
    } 
     
    sp.addEventListener(Event.COMPLETE, swfCharge); 
    //sp.addEventListener(Event.INIT, swfCharge); 
    sp.load(new URLRequest(path));
    soit je passe par un Loader

    Méthode 2 :

    Action Script

    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
     
    var swfLoader:Loader = new Loader();
    swfLoader.contentLoaderInfo.addEventListener(Event.INIT, swfChargeLOAD);
    swfLoader.load(new URLRequest(path));
     
    sp.addChild(swfLoader);
     
    function swfChargeLOAD(eventObj:Event):void
    {
    	var loader:Loader = Loader(eventObj.target.loader);
    	var info:LoaderInfo = LoaderInfo(loader.contentLoaderInfo);
     
    	trace("swfLoader info.content : " + info.content + " - " + info.loaderURL);
     
    	var myContent:MovieClip = MovieClip(info.content);
    	myContent.chargeDetail(fichierActif);
    }

    Et là, c'est bien ;
    je charge le fichier externe,
    j'appel la fonction "chargeDetail()" et lui passe un paramètre...
    mais impossible de faire que cela s'affiche dans le ScrollPane !

    Ca énerve un peu en fin d'journée comme ça...

    Mais bon, la nuit porte conseil, et je lance un appel aux insomniaques qui ont qq idées sur le sujet...

    D'avance MERCI

    raydu

  5. #5
    Membre expérimenté
    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
    Par défaut
    Arf... y'a plusieurs choses qui me viennent à l'esprit:

    - J'ai déjà eu un problème d'accès à des variables internes de SWF avec le Event.INIT. En fait, au moment où Event.INITdéclanche ta méthode en fin de chargement, parfois, les données ne sont pas encore disponibles. Je pense que ça vient d'une décompression asynchrone du SWF. Il faut attendre quelques frames avant de tenter d'accéder aux données du SWF. Pour vérifier si c'est ça ton problème, déclanche swfCharge à partir d'un bouton sur lequel tu cliques plutôt qu'avec le Event.INIT. Ou alors essaye un truc dans le genre:

    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
    var count:uint = 0;
    var storeEvent:Event;
     
    function swfChargeWait(e:Event):void {
       storeEvent = e;
       sp.addEventListener("enterFrame", swfChargeFrame);
    }
     
    function swfChargeFrame(e:Event):void {
       count++;
       if (count>100) {
          sp.removeEventListener("enterFrame", swfChargeFrame);
          swfCharge(storeEvent)
       }
    }
     
    function swfCharge(e:Event):void {
       // ton traitement ici
    }
     
    sp.addEventListener(Event.INIT, swfChargeWait); 
    sp.load(new URLRequest(path));
    T'as peut-être même pas besoin de storeEvent...
    Si ça marche, c'est que c'est bien ce problème. Je t'expliquerai une meilleure méthode.

    -Sinon, tu dois pouvoir charger ton SWF sous forme binaire avec un URLLoader, et forcer le contenu de ton ScrollPane pour qu'il considère comme content ce que tu as chargé avec le URLLoader... mais on va déjà essayer la première solution hein ?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7
    Par défaut
    Merci pour ta réponse,

    Je viens de mettre cela en pratique mais ça ne donne rien.

    J'aimerais arriver à garder la méthode de chargement avec le Loader
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var swfLoader:Loader = new Loader();
    Mais le soucis est de ne pas réussir à mettre ça dans le scrollPane ! J'suis un peu perdu. (pourquoi un peu ?)

    Sinon, je suis en trina décortiquer la Class ScrollPane pour essayer de voir comment mettre ça dedans... c'est pas gagné

    ...

    Moza

  7. #7
    Membre expérimenté
    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
    Par défaut
    C'est quoi les erreurs que t'as? quel type (n° et message de console)?

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7
    Par défaut
    Je n'ai pas de messages d'erreur !

    J'ai simplement le soucis une fois que le SWF est chargé (DANS le scrollPane) de ne pas réussir à exécuté une fonction qui se trouve DANS le swf chargé.

    En fait je n'arrive pas à l'atteindre ce SWF...

    -----------

    Le seul cas où j'arrive à l'atteindre c'est en passant par Loader mais là il ne se charge pas dans le scrollPan.

    ???

  9. #9
    Membre expérimenté
    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
    Par défaut
    Hummm... un truc m'échappe... ça doit pas être vraiment compliqué, mais j'arrive pas à identifier ton problème... normalement, en as3, si tu appelles un propriété ou une méthode avec un chemin qui est faux, ça doit te générer une erreur dans la fenêtre de trace... l'erreur permetrait de cibler le problème... je comprends pas que tu n'aies rien... tu es sûr de faire l'appel?

    Arf... je sais pô comment t'aider...

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7
    Par défaut
    Alors tout d'abord MERCI pour ton aide !
    Vraiment.

    Le problème c'est que des Erreurs j'en plein... ça dépdend de ce que je fait !

    Ce que je veux faire, c'est appelé une fonction qui est dans le fichier chargé (à savoir chargeDetail() )
    Mais lorsque j'essaie de l'appeler à partir du fichier principal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function swfCharge(e:Event):void {
          // Mettre ici le code qui appel la fonction 
          // DANS le fichier chargé
    }
    j'ai une erreur :

    1180: Appel à une méthode qui ne semble pas définie, chargeDetail().

    Et je n'arrive pas à trouver le chemin jusqu'à cette fonction !

    Le seul cas où j'ai réussi à appelé la fonction c'était en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var swfLoader:Loader = new Loader();
    Maios là je n'arrive pas à charger mon SWF dans le scrollPane.

    Donc si tu as une idée de comment TROUVER le chemin pour appeler la fonction en utilisant le code :
    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
     
    // un p'tit ScrollPan 
    var sp:ScrollPane = new ScrollPane(); 
    sp.move(10,190); 
    sp.name = "leScroller"; 
    sp.setSize(530,400); 
    addChild(sp); 
     
    function swfCharge(e:Event):void 
    { 
       // C'est quoi le chemin vers ma fonction ???
    } 
     
    sp.addEventListener(Event.COMPLETE, swfCharge); 
    //sp.addEventListener(Event.INIT, swfCharge); 
    sp.load(new URLRequest(path));
    Je t'avoue que je suis en train de réfléchir à une autre solution d'affichage que le scrollPane car je ne m'en sort pas, et d'un autre côté je n'aime pas laissé un truc incompris derrière moi...

    Raydu

  11. #11
    Membre expérimenté
    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
    Par défaut
    Rhaa !! j'ai trouvé !! le chemin de ta fonction c'est:

    sp.content["chargeDetail"]();

    j'explique plus tard...

  12. #12
    Membre expérimenté
    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
    Par défaut
    ça c'est le code de la classe document du swf que tu charges:
    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
    package {
     
    	import flash.display.MovieClip;
     
    	public class MySWFToLoad extends MovieClip{
     
    		public function MySWFToLoad() {
    			trace("MySWFToLoad créé");
    		} // end constructor
     
    		public function chargeDetail():String {
    			return "Ca marche !!";
    		} // end chargeDetail
     
    	} // end class
    } // end package
    J'ai appelé le fichier AS de la classe document "MySWFToLoad.as" et le document flash "SwfToLoad.fla"

    Ensuite, ça c'est le code de la classe document qui charge:
    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
    package {
     
    	import flash.display.MovieClip;
    	import flash.events.Event;
    	import flash.net.URLRequest;
    	import fl.containers.ScrollPane;
     
    	public class MyLoader extends MovieClip {
     
    		public function MyLoader() {
    			trace("MyLoader créé");
     
    			var sp:ScrollPane = new ScrollPane(); 
    			sp.move(10,190); 
    			sp.name = "leScroller"; 
    			sp.setSize(530,400); 
    			addChild(sp); 
     
    			function swfCharge(e:Event):void {
    				trace("C'est chargé !! ça devrait être créé");
    				trace("Tentative: "+sp.content["chargeDetail"]());
     
    				// parce qu'en fait il faudrait écrire
    				var myContent:MySWFToLoad = MySWFToLoad(sp.content);
    				trace("Solution: "+myContent.chargeDetail());
    			} // end swfCharge
     
    			sp.addEventListener(Event.COMPLETE, swfCharge); 
    			//sp.addEventListener(Event.INIT, swfCharge); 
    			sp.load(new URLRequest("SwfToLoad.swf"));
     
    		} // end constructor
     
    	} // end class
    } // end package
    c'est parce que par défaut, ScrollPane.content est casté DisplayObject, or DisplayObject n'a pas de méthode chargeDetail()... donc ça génère une erreur. Il faut donc soit forcer le chemin en mode runTime avec ["chargeDetail"]() ce qui n'est pas très propre, soit caster DisplayObject.content avec le type de la classe document que tu as créé pour ton swf chargé... puisque cette classe document, elle, a bien une méthode chargeDetail(). Donc, pas d'erreur.

    Donc tu crées une variable du type de la classe document que tu charges, ici myContent, qui contiendra donc ta méthode, et tu cast le contenu de DisplayObject.content pour le forcer à adopter ce type...

    En fait, c'est une erreur classique... mais j'avais pô vu.
    En essayant, du coup, ça m'est revenu

    ouf !!

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7
    Par défaut Respect ô grand David Buff
    Franchement trop fort !

    Ca roule super.

    J'ai dû me familiariser avec deux trois trucs, mais ton code c'est la balle !

    champion du monde

    1000 mercis.

    Raydu

  14. #14
    Membre expérimenté
    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
    Par défaut [Résolu]
    Mais c'est un plaisir, de rien !

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

Discussions similaires

  1. [FLASH MX2004] Alignement d'un swf dans un autre swf
    Par mike-sixteen dans le forum Flash
    Réponses: 3
    Dernier message: 09/08/2004, 11h37
  2. [FLASH MX 2004]Precharger une animation(SWF dans SWF)
    Par Geilgestorm dans le forum Flash
    Réponses: 20
    Dernier message: 16/05/2004, 13h40
  3. swf dans une boucle asp
    Par Chucky69 dans le forum Flash
    Réponses: 11
    Dernier message: 10/02/2004, 17h07
  4. Réponses: 4
    Dernier message: 15/12/2003, 17h46
  5. comment integer une animation swf dans une page
    Par naili dans le forum Intégration
    Réponses: 7
    Dernier message: 18/09/2002, 18h54

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