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 :

problème de communication entre mes classes


Sujet :

ActionScript 3

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 11
    Par défaut problème de communication entre mes classes
    Hello !
    Bon je pense que c'est super simple et que encore une fois je suis super nulle... mais bon, je débute, je ne suis qu'une humble graphiste à la base...

    J'ai dans ma MainClass utilisé une méthode publique : myGotoAndStop

    De mon clip principal j'ai loadé un clip swf fille, ce clip fille a une classe : ClasseMonChoix

    Dans la ClasseMonChoix, je voudrais réutiliser la méthode myGotoAndStop mais là, j'ai une erreur comme quoi ma méthode ne semble pas avoir été définie...
    Moi, je pensais que les classes discutaient entre elles, qu'on avait pas besoin de les présenter ;-)

    Je suppose que je pourrais réécrire ma méthode dans cette classe ClasseMonChoix, mais je voudrais éviter de réécrire 20 fois le même code alors qu'il doit être possible de le partager..

    Sérieusement, je ne sais pas comment faire....
    Merci de votre aide


    Code (simplifié) de MainClass :

    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
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    package Classes{
     
    	import flash.display.*;
    	import flash.events.*;
    	import flash.system.*;
    	import flash.net.*;
    	import flash.ui.*;
     
    	public class MainClass extends MovieClip {
     
    		// variable permettant l’exécution de la fonction de rappel 
    		private var rappel:Function;
     
    		// variable permettant de télécharger les swf filles
    		private var chargeur:Loader;
     
    		// variable permettant de donner le nom du swf fille à charger
    		private var filleClip:URLRequest
     
    		public function MainClass() {
     
    			trace( "initialisation MainClass" );
    			trace( "-----------" );
     
    				// on écoute les boutons du menu principal
    				btnAccueil.addEventListener( MouseEvent.MOUSE_DOWN, versAccueil );
     
    			}		
     
    			function versAccueil( event ):void {
     
    				// déplace la tête de lecture à l'étiquette, lorsque tous les objets sont disponibles 
    				// la fonction actifAccessible est déclenchée 
    				myGotoAndStop( "accueil", actifAccessibleAccueil );
    			}
     
    			function actifAccessibleAccueil():void {
     
    				// on écoute le bouton qui permet de loader la fille
    				btnAccueil.addEventListener( MouseEvent.MOUSE_DOWN, monChoix );
     
    			}
     
     
    		}//fin public function MainClass()
     
     
    		public function monChoix( event:MouseEvent ):void {
     
    		filleClip = new URLRequest("monChoix.swf");
     
     		chargementFille();
     
    		}
     
     
    		// fonction de déplacement de la tête de lecture personnalisée
    		public function myGotoAndStop( pImage:String, pFonction:Function ):void {
     
    			// déplacement de la tête de lecture 
    			gotoAndStop( pImage );
     
    			// retourne un objet permettant 
    			rappel=pFonction;
     
    			// écoute de l'événement Event.RENDER 
    			addEventListener( Event.RENDER, miseAJour );
     
    			// force la diffusion de l'événement Event.RENDER 
    			stage.invalidate();
    		}
     
    		private function miseAJour( pEvt:Event ):void {
    			// nous tentons d'appeler la fonction de rappel 
    			// si cela échoue, nous affichons un message d'erreur  
    			// dans tout les cas, nous supprimons l'écoute de l'événement Event.RENDER
    			try {
    				rappel();
    			} catch (pErreur:Error) {
    				trace( "Erreur : La méthode de rappel n'a pas été définie" );
    			} finally {
    				removeEventListener( Event.RENDER, miseAJour );
    			}
    		}
     
     
    		//permet de loader la fille
    		public function chargementFille():void {
     
    			//on crer un nouveau contenant
    			chargeur = new Loader();
     
     			//on charge le clip à l'interieur
    			chargeur.load ( filleClip ); 
     
    			//le chargeur est ajouter à la liste d'affichage
    			addChild ( chargeur );
     
    			//on ecoute quand le contenu est fini de charger
    			chargeur.contentLoaderInfo.addEventListener ( Event.COMPLETE, termine );
     
    		}
     
    		//quand le clip est fini de charger à l'interieur du contenant
    		private function termine ( pEvt:Event ):void { 
     
    			// référence le scénario de l'animation chargée 
     			var scenario:DisplayObject = pEvt.target.content; 
     
    			 // affiche : [object MainTimeline] 
    			 trace( scenario ); 
    		}
     
    	}// fin de public class MainClass
     
    }// fin du package

    Code (simplifié) de ClasseMonChoix :

    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
    package Classes{
     
    	import flash.display.*;
    	import flash.events.*;
    	import flash.system.*;
    	import flash.net.*;
    	import flash.ui.*;
     
    	public class ClasseMonChoix extends MovieClip {
     
    		public function ClasseMonChoix() {
     
    			//ecouteur pour le bouton continuer
    			btnContinuer.addEventListener( MouseEvent.MOUSE_DOWN, continuer );
     
    			//fonction du bouton continuer
    			function continuer(event:MouseEvent):void {
     
    				trace ("continuer");
     
    				//déplace la tête de lecture à l'étiquette, lorsque tous les objets sont disponibles, 
    				//la fonction actifAccessible est déclenchée 
    				myGotoAndStop( "etiquette2", actifAccessibleEtiquette2);
     
    			}
     
    			function actifAccessibleEtiquette2():void {
     
    				trace("ça marche : etiquette 2");
    				trace( "-----------" );
    			}
     
     
    		}//fin public function ClasseMonChoix()
     
    	}// fin de public class ClasseMonChoix
     
    }// fin du package

  2. #2
    Membre éprouvé
    Profil pro
    Développeur multimédia
    Inscrit en
    Juin 2009
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Juin 2009
    Messages : 130
    Par défaut
    Ces 2 classes ne se connaissent pas car aucune n'instancie l'autre.

    Tes 2 classes héritent de MovieClip. Créé une classe classeMere, dans laquelle tu écrit la méthode myGotoAndStop.

    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
     
    package  
    {
    	import flash.display.MovieClip;
     
    	public class ClasseMere extends MovieClip
    	{
     
    		public function ClasseMere() 
    		{
    			//init
    		}
     
    		// fonction de déplacement de la tête de lecture personnalisée
    		public function myGotoAndStop( pImage:String, pFonction:Function ):void {
     
    			// déplacement de la tête de lecture 
    			gotoAndStop( pImage );
     
    			// retourne un objet permettant 
    			rappel=pFonction;
     
    			// écoute de l'événement Event.RENDER 
    			addEventListener( Event.RENDER, miseAJour );
     
    			// force la diffusion de l'événement Event.RENDER 
    			stage.invalidate();
    		}
     
    	}
     
    }
    puis tes 2 autres classes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public class MainClass extends ClasseMere { //...
    Supprime la méthode myGotoAndStop de cette classe puisqu'elle en hérite désormais.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public class ClasseMonChoix extends ClasseMere { //...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 11
    Par défaut oui mais
    mes classes MainClass et ClasseMonChoix sont liés à mes clips dans les propriétés sinon ça ne fonctionne pas, donc il ne peuvent pas être extends ClasseMere puisqu'ils doivent être extends MovieClip ...

  4. #4
    Membre éprouvé
    Profil pro
    Développeur multimédia
    Inscrit en
    Juin 2009
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Juin 2009
    Messages : 130
    Par défaut
    Ca ne pose pas de problème, tu remplace la "classe de Base" avec ta classe ClasseMere et ça reviens au même.

    De plus, ClasseMere extends MovieClip, donc par extension, MainClass et ClasseMonChoix étendront MovieClip, de la même manière que Movieclip étend Sprite, donc étends DisplayObjectContainer, donc étends InteractiveObject, donc étend DisplayObject, donc étend EventDispatcher....

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 11
    Par défaut
    Je viens de faire l'essai en liant mon .fla qui est mon clip de début avec la ClasseMere extends MovieClip (où il n'y a que ma fonction myGotoAndStop) et du coup mon MainClass est extends ClasseMere...

    Et ben il ne joue plus rien parce que du coup il n'y a plus d'accès à tout mes codes qui étaient sur MainClass je pense...


    Et j'ai essayé aussi de garder la MainClass liée à mon clip de début et de faire ClasseMonChoix extends MainClass mais y'a des bugs...

    Il a besoin de faire des liens entre les .fla et les .as car les éléments sont déjà sur la scène (c'est une contrainte)... d'où d'ailleurs la fonction myGotoAndStop

    Bon sinon ça marche si je remets mon code de myGotoAndStop dans ClasseMonChoix mais j'aurais voulu éviter de le réécrire à chaque fois... j'avais un ami qui m'avait parlé de mettre juste un code dans un as pour le rappeler ensuite un genre de "colle ici juste le bout de code" mais je ne me souviens plus comment...

    Merci en tous cas...

  6. #6
    Membre éprouvé
    Profil pro
    Développeur multimédia
    Inscrit en
    Juin 2009
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Juin 2009
    Messages : 130
    Par défaut
    L'autre solution serait de faire une method static effeectivement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public class ClasseB{
    <div style="margin-left:40px">public function ClasseB{}</div><div style="margin-left:40px">static public function myGotoAndPlay(arg1, arg2){
    //blabla
    }</div>}
    Et tu appelle la méthode dans ton code en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ClasseB.myGotoAndPlay(value1, value2);
    Le souci c'est qu'avec cette méthode, tu ne peux souvent pas faire de new dans cette méthode.

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

Discussions similaires

  1. Problème de communication entre 2 class
    Par sancho.poncho dans le forum Général Python
    Réponses: 6
    Dernier message: 15/05/2013, 21h10
  2. Problème de communication entre classe
    Par FabaCoeur dans le forum Général Java
    Réponses: 4
    Dernier message: 22/01/2008, 13h50
  3. [c#] probléme de communication entre classe
    Par OpenGG dans le forum C#
    Réponses: 1
    Dernier message: 24/09/2006, 21h54
  4. Problème de communications entre threads
    Par maya09 dans le forum Windows
    Réponses: 1
    Dernier message: 22/02/2006, 22h18
  5. Réponses: 3
    Dernier message: 22/11/2005, 11h12

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