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 :

Clips et mutateurs


Sujet :

ActionScript 3

  1. #1
    Candidat au Club
    Homme Profil pro
    sans emploi
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Clips et mutateurs
    Bonjour à tous,

    Après de longues année à utiliser l'AS2, j'ai décidé de passer à l'AS3 mais pas sans mal. Voilà mon problème:

    J'ai deux clips:

    base: occurrence de Base qui utilise la classe Base.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
     
    package  {
     
    	import flash.display.MovieClip;
    	import flash.events.MouseEvent;
    	import flash.geom.Point;
    	import flash.events.Event;
     
     
    	public class Base extends MovieClip {
     
    		//*** Attributs ***
    		private var _cursposx:Number; //mémorisation curseur x
    		private var _cursposy:Number; //mémorisation curseur y
    		private var _vitesse:Number; //vitesse globale
    		private var _vitessex:Number; //vitesse à appliquer en x
    		private var _vitessey:Number; //vitesse à appliquer en y
    		private var _angleRadian:Number; // angle en radian
    		private var _angleDegree:Number; // angle en degree
    		private var _mouseisdown:Boolean; // si le clique est enfoncé
     
    		//*** Constructeur ***
    		public function Base() {
    			_vitesse = 5;
    			addEventListener(Event.ENTER_FRAME, enterFrame);
    			addEventListener ( MouseEvent.MOUSE_DOWN, update );
    			addEventListener ( MouseEvent.MOUSE_UP, update2 );
    		}
     
    		//*** Accesseurs/Mutateurs ***
     
     
    		//*** Méthodes ***
     
    		public function update(event:MouseEvent):void{
    			_mouseisdown = true;
    			_cursposx = stage.mouseX;
    			_cursposy = stage.mouseY;
    			_angleRadian = Math.atan2(_cursposy - 360,_cursposx - 600);
    			_angleDegree = _angleRadian * 180 / Math.PI;
    			_vitessex = Math.cos(_angleRadian) * _vitesse; 
    			_vitessey = Math.sin(_angleRadian) * _vitesse;
     
                            root.carre_mc.protation(_angleDegree);						
    		}
    		public function update2(event:MouseEvent):void{
    			_mouseisdown = false;						
    		}
    		public function update3():void{
    			_mouseisdown = true;
    			_cursposx = stage.mouseX;
    			_cursposy = stage.mouseY;
    			_angleRadian = Math.atan2(_cursposy - 360,_cursposx - 600);
    			_angleDegree = _angleRadian * 180 / Math.PI;
    			_vitessex = Math.cos(_angleRadian) * _vitesse; 
    			_vitessey = Math.sin(_angleRadian) * _vitesse;
     
    		}
     
    		public function enterFrame(e:Event):void{
     
    			if(_mouseisdown == true){update3()}
    			if(_cursposx < 590){x -=_vitessex;_cursposx -=_vitessex;}
    			if(_cursposx > 610){x -=_vitessex;_cursposx -=_vitessex;}
    			if(_cursposy < 350){y -=_vitessey;_cursposy -=_vitessey;}
    			if(_cursposy > 370){y -=_vitessey;_cursposy -=_vitessey;}
    			trace(_mouseisdown);
     
    		}
     
     
    	}//fin classe
     
    }//fin package
    carre_mc: occurrence de Carre qui utilise la classe Carre.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
     
    package  {
     
    	import flash.display.MovieClip;
     
     
    	public class Carre extends MovieClip {
     
    		//*** Attributs ***
    		private var _rotation:int;
     
    		//*** Constructeur ***
    		public function Carre() {
    			_rotation = 90;
    		}
     
    		//*** Accesseurs/Mutateurs ***
     
    		public function get protation():Number{
    			return _rotation;
    		}
     
    		public function set protation(nombre:Number):void{
    			_rotation = Math.floor(nombre);
    			this.rotation = _rotation;
    		}
     
     
    	}//fin classe
     
    }//fin package
    les deux clips sont placés dynamiquement sur la scène principale dans l'image1 du calque1:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var base:Base = new Base();
    base.x = 600;
    base.y = 360;
    addChild(base);
     
    var carre_mc:Carre = new Carre();
    carre_mc.x = 600;
    carre_mc.y = 360;
    addChildAt(carre_mc,1);
    Je voudrais que lorsque je clique sur base, carre_mc pivote suivant _angleDegree. J'ai donc créé le mutateur "set protation" dans la classe Carre.as.
    Dans la classe Base.as sur l'événement CLICK je veux appeler ce mutateur mais je n'y parvient pas.

    J'ai essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    carre_mc.protation(_angleDegree);
    root.carre_mc.protation(_angleDegree);
    stage.carre_mc.protation(_angleDegree);
    MovieClip(carre_mc).protation(_angleDegree);
    J'ai toujours l'erreur suivante:

    1119: Accès à la propriété carre_mc peut-être non définie, via la référence de type static flash.displayisplayObject.

    Je ne comprend pas car cette erreur car j'ai bien précisé "public" devant mon mutateur.

  2. #2
    Membre actif Avatar de gustave02
    Homme Profil pro
    aucune
    Inscrit en
    Février 2013
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Février 2013
    Messages : 162
    Points : 225
    Points
    225
    Par défaut a essayer
    sans tous le dossier fla et class il est dure d'être sur de bien te répondre.

    as tu essayer avec dispatchevent. pas simple de te donner un exemple.

  3. #3
    Candidat au Club
    Homme Profil pro
    sans emploi
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    J'ai mi l'intégralité de mon code, il n'y a que ça. Par contre je n'ai pas précisé que j'utilisais Flash CC.

  4. #4
    Membre actif Avatar de gustave02
    Homme Profil pro
    aucune
    Inscrit en
    Février 2013
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Février 2013
    Messages : 162
    Points : 225
    Points
    225
    Par défaut re voila un exemple
    ma base
    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
    package  {
    	import flash.display.MovieClip;
    	import flash.display.Sprite;
    	import flash.events.MouseEvent;
    	import flash.events.Event;
     
    	public class Base extends MovieClip {
     
    		public function Base() {
    			            var graph:Sprite = new Sprite();
    						graph.graphics.beginFill(0xAAAAFF,1);
    						graph.graphics.drawCircle(0,0,20);
    						graph.addEventListener(MouseEvent.CLICK, envoisEvent);
    						addChild(graph);
    		}
    		private function envoisEvent(event:MouseEvent):void{
    			            dispatchEvent(new Event("TOURNE"));
    		}
     
    	}
     
    }
    mon carre
    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
    package  {
    	import flash.display.MovieClip;
    	import flash.display.Sprite;
    	import flash.events.MouseEvent;
    	import flash.events.Event;
     
    	public class Carre extends MovieClip {
     
    		public function Carre() {
    			            var graph:Sprite = new Sprite();
    						graph.graphics.beginFill(0xAAFFAA,1);
    						graph.graphics.drawRect(0,0,20,45);
    						addChild(graph);
    		}
    	}
     
    }
    fla
    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 base:Base = new Base();
    base.x = 600;
    base.y = 360;
    base.addEventListener("TOURNE",tourne);
    addChild(base);
     
    var carre_mc:Carre = new Carre();
    carre_mc.x = 600;
    carre_mc.y = 360;
    addChildAt(carre_mc,1);
     
     
    function tourne(event:Event){
    	         carre_mc.rotation += 20;
    			 //tu peux appeler une fonction d'une class si elle est public ex carre_mc.tourne(ton Nombre);
    }
    j’espère ne pas être a coté de la question.

    code-ialement gustave02

  5. #5
    Candidat au Club
    Homme Profil pro
    sans emploi
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Merci gustave02, ça fonctionne mais ce n'est pas ce que je souhaite faire:

    Je peux effectivement accéder aux fonctions public de mon clip carre_mc depuis le fla; mais ce que je veux c'est y accéder depuis la classe base.

    En C++ il me semble qu'on utilise le mot Friend devant la fonction, en AS2 il me suffisait d'écrire le chemin depuis _root, mais en AS3 je ne trouve rien.

  6. #6
    Membre actif Avatar de gustave02
    Homme Profil pro
    aucune
    Inscrit en
    Février 2013
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Février 2013
    Messages : 162
    Points : 225
    Points
    225
    Par défaut re
    ma base
    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
     
    package  {
    	import flash.display.MovieClip;
    	import flash.display.Sprite;
    	import flash.events.MouseEvent;
    	import flash.events.Event;
     
    	public class Base extends MovieClip {
     
    		public function Base() {
    			            var graph:Sprite = new Sprite();
    						graph.graphics.beginFill(0xAAAAFF,1);
    						graph.graphics.drawCircle(0,0,20);
    						graph.addEventListener(MouseEvent.CLICK, envoisEvent);
    						addChild(graph);
    		}
    		private function envoisEvent(event:MouseEvent):void{
    			            MovieClip(root).carre_mc.rotation += 20;
    		}
     
    	}
     
    }
    comme ca? MovieClip(root).carre_mc.rotation += 20; en partant de mon exemple.
    gustave02

  7. #7
    Candidat au Club
    Homme Profil pro
    sans emploi
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Youpi !!!

    Merci gustave02 c'est parfaitement ça.

    Il suffisait donc d'utiliser MovieClip(root) à la place de _root pour l'AS2.

    Comme quoi c'est super simple mais il faut le savoir.

  8. #8
    Membre actif Avatar de gustave02
    Homme Profil pro
    aucune
    Inscrit en
    Février 2013
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Février 2013
    Messages : 162
    Points : 225
    Points
    225
    Par défaut re
    désolé de pas avoir capter au début

    @+ gustave02

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

Discussions similaires

  1. [FLASH MX] Scrollbar associée à un movie-clip
    Par dens63 dans le forum Flash
    Réponses: 19
    Dernier message: 05/06/2006, 11h41
  2. [FLASH MX2004] Clip qui ne s'arrête pas
    Par romain starck dans le forum ActionScript 1 & ActionScript 2
    Réponses: 8
    Dernier message: 10/05/2006, 19h43
  3. Pb d'action sur un clip
    Par bencasp dans le forum Flash
    Réponses: 4
    Dernier message: 22/10/2003, 17h11
  4. Clipping et projection orthogonale
    Par Luke-77 dans le forum DirectX
    Réponses: 4
    Dernier message: 01/10/2003, 20h02
  5. Chemin d'accès au clip et scenario en flash
    Par Gential dans le forum Flash
    Réponses: 4
    Dernier message: 28/02/2003, 10h10

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