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 1 & ActionScript 2 Discussion :

Comment attacher un clip de classe sur un autre clip de classe


Sujet :

ActionScript 1 & ActionScript 2

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 9
    Par défaut Comment attacher un clip de classe sur un autre clip de classe
    Bonsoir,
    Je voudrais créer une horloge mais par l'intermédiaire d'une classe (afin qu'elle soit réutilisable dans plusieurs programmes).

    Voici le code de la classe de l'horloge (pour l'instant il ne comprend que le fond)

    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
     
    ///////////////////
    /* UneHorloge.as */
    ///////////////////
     
    dynamic class UneHorloge extends MovieClip
    {
    private var taille:Number;
    private var conteneur_mc:MovieClip;
     
    public var couleur_trait:Number=0xFF6600;
    public var couleur_fond:Number=0x00FF99;
    public var couleur_grande_aiguille:Number=0x660000;
    public var couleur_petite_aiguille:Number=0xFFCC00;
     
    public var place:Array;
     
    public function UneHorloge(tal:Number,cible:MovieClip,nom:String,profondeur:Number)
        {
        taille=tal;
        conteneur_mc=cible.createEmptyMovieClip(nom,profondeur);
        conteneur_mc.clear();
        dessine();
        }
     
    public function dessine()
        {
        // dessine le fond
        conteneur_mc.lineStyle(4,couleur_trait);
        conteneur_mc.moveTo(0,0);
        conteneur_mc.moveTo(0-taille,0);
        conteneur_mc.beginFill(couleur_fond,100);
        var pas_dessin:Number=100;
        var curseur_dessin:Number=1;
        while (curseur_dessin<pas_dessin+1)
            {
            conteneur_mc.lineTo(-taille+2*taille*curseur_dessin/pas_dessin,2*taille/pas_dessin*Math.sqrt(curseur_dessin*(pas_dessin-curseur_dessin)));
            curseur_dessin++;
            }
        curseur_dessin=pas_dessin-1;
        while (curseur_dessin>1)
            {
            conteneur_mc.lineTo(-taille+2*taille*curseur_dessin/pas_dessin,-2*taille/pas_dessin*Math.sqrt(curseur_dessin*(pas_dessin-curseur_dessin)));
            curseur_dessin--;
            }
        conteneur_mc.endFill();
        // comment rajouter les aiguilles ?
        }
     
    public function setPos(pos:Array)
        {
        place=new Array(2);
        place=pos;
        conteneur_mc._x=place[0];
        conteneur_mc._y=place[1];
        }
     
    }
    Je voudrais que les aiguilles, dont le code de classe suit, puissent être intégrées au dessin de l'horloge (dans la classe horloge) [ remarque : les aiguilles sont destinées à bouger par la suite de façon indépendante]

    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
     
    ////////////////////
    /* UneAiguille.as */
    ////////////////////
     
    dynamic class UneAiguille extends MovieClip
    {
    private var taille:Number;
    private var conteneur_mc:MovieClip;
     
    public var couleur:Number;
    public var angle:Number;
     
    public function UneAiguille(tal:Number,col:Number,cible:MovieClip,nom:String,profondeur:Number)
        {
        taille=tal;
        couleur=col;
        conteneur_mc=cible.createEmptyMovieClip(nom,profondeur);
        conteneur_mc.clear();
        dessine();
        }
     
    public function dessine()
        {
        conteneur_mc.lineStyle(1,couleur);
        conteneur_mc.moveTo(0,0);
        conteneur_mc.beginFill(couleur,100);
        conteneur_mc.lineTo(Math.floor(85*taille/100),-Math.floor(15*taille/100));
        conteneur_mc.lineTo(taille,0);
        conteneur_mc.lineTo(Math.floor(85*taille/100),+Math.floor(15*taille/100));
        conteneur_mc.lineTo(0,0);
        conteneur_mc.endFill();    
        }
    }
    La seule fonction que je connaisse est attach.Movie mais elle implique que le clip à attacher soit présent dans la bibliothèque (ce qui n'est pas le cas ici puisqu'il provient d'une classe …) et l'autre que j'ai trouvée est load.movie mais elle semble ne servir qu'à attacher des .swf.
    D'avance merci pour votre aide.

  2. #2
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 9
    Par défaut Ce n'est pas très beau mais çà marche
    J'ai finalement trouvé un dérivatif :
    • tous les clips sont construits dans la même classe à coup de conteneur_mc.createEmptyMovieClip("nomduclip_i_mc",profondeurduclip_i);
      suivis de
      conteneur_mc.nomduclip_i_mc.moveTo( ……
      pour la construction de chacun des clips

    • pour récupérer des variables de la classe j'utilise l'astuce donnée par CR_Gio (merci à lui) sur ce forum à savoir :
      var instanceClasse:new Nomdemaclasse=this;
      qui permet de faire référence à la racine de l'objet créé.


    Il n'en reste pas moins qu'il me reste encore à rajouter les graduations (je devrais pouvoir me débrouiller) et que je n'arrive pas à faire passer à l'heure suivante quand la grande aiguille passe le 12 (là c'est trop dur !).
    Ci-dessous le script pour ceux que cela intéresserait :
    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
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
     
    ///////////////////
    /* UneHorloge.as */
    ///////////////////
     
    dynamic class UneHorloge
    {
    private var conteneur_mc:MovieClip;
    private var cible_mc:MovieClip;
     
    private var profondeur_Conteneur:Number;
    private static var profondeur_Fond:Number=0;
    private static var profondeur_Grande_Aiguille:Number=1;
    private static var profondeur_Petite_Aiguille:Number=2;
     
    private var taille:Number;
     
    private var couleur_trait:Number=0xFF6600;
    private var couleur_fond:Number=0x00FF99;
    private var couleur_grande_aiguille:Number=0x660000;
    private var couleur_petite_aiguille:Number=0xFFCC00;
     
    private var bouge_petite_aiguille:Boolean=false;
    private var bouge_grande_aiguille:Boolean=false;
     
    public var place:Array=new Array(0,0);
     
    public var angle_petite_aiguille:Number;
    public var angle_grande_aiguille:Number;
    public var heure:Array=new Array(0,0);
     
     
    public function UneHorloge(cible:MovieClip,profondeur:Number,pos:Array,tal:Number)
        {
        cible_mc=cible;
        profondeur_Conteneur=profondeur;
        taille=tal;
        dessine();
        setPos(pos);
        }
     
     
    private function dessine()
        {
        conteneur_mc=cible_mc.createEmptyMovieClip("conteneur_mc"+profondeur_Conteneur,profondeur_Conteneur);
        dessine_fond();
        dessine_grande_aiguille();
        dessine_petite_aiguille();
        var instanceClasse:UneHorloge=this;
        conteneur_mc.petite_aiguille_mc.onPress=function()
            {
            if ((!instanceClasse.bouge_grande_aiguille)&&(!instanceClasse.bouge_petite_aiguille)) instanceClasse.bouge_petite_aiguille=true;
            else instanceClasse.bouge_petite_aiguille=false;
            trace("petite : "+instanceClasse.bouge_petite_aiguille);
            }
        conteneur_mc.petite_aiguille_mc.onMouseMove=function()
            {
            var angle_souris:Number=0;
            if (instanceClasse.bouge_petite_aiguille)
                {
                var angle_souris:Number=0;
                //trace ("souris : "+_xmouse+";"+_ymouse+" et centre : "+instanceClasse.place[0]+","+instanceClasse.place[1]);
                angle_souris=90-Math.atan2((-_ymouse+instanceClasse.place[1]),(_xmouse-instanceClasse.place[0]))*180/Math.PI;
                angle_souris=(360+angle_souris)%360;
                angle_souris=30*Math.round(angle_souris/30);
                //trace(angle_souris);
                this._rotation=angle_souris;
                instanceClasse.heure[0]=angle_souris/30;
                }
            }
        conteneur_mc.grande_aiguille_mc.onPress=function()
            {
            if ((!instanceClasse.bouge_grande_aiguille)&&(!instanceClasse.bouge_petite_aiguille)) instanceClasse.bouge_grande_aiguille=true;
            else instanceClasse.bouge_grande_aiguille=false;
            trace("grande : "+instanceClasse.bouge_grande_aiguille);
            trace(this._rotation);
            }
        conteneur_mc.grande_aiguille_mc.onMouseMove=function()
            {
            var angle_souris:Number=0;
            var angle_precedent:Number=(this._rotation+360)%360;
            if (instanceClasse.bouge_grande_aiguille)
                {
                //trace ("souris : "+_xmouse+";"+_ymouse+" et centre : "+instanceClasse.place[0]+","+instanceClasse.place[1]);
                angle_souris=90-Math.atan2((-_ymouse+instanceClasse.place[1]),(_xmouse-instanceClasse.place[0]))*180/Math.PI;
                angle_souris=(360+angle_souris)%360;
                angle_souris=6*Math.round(angle_souris/6);
                //trace(angle_souris);
                this._rotation=angle_souris;
                instanceClasse.heure[1]=angle_souris/6;
    instanceClasse.conteneur_mc.petite_aiguille_mc._rotation=30*instanceClasse.heure[0]+(angle_souris/12);
                }
            }
        }
     
    private function dessine_fond()
        {
        conteneur_mc.createEmptyMovieClip("fond_mc",profondeur_Fond);
        conteneur_mc.fond_mc.lineStyle(4,couleur_trait);        
        conteneur_mc.fond_mc.moveTo(0-taille,0);
        conteneur_mc.fond_mc.beginFill(couleur_fond,100);
        var pas_dessin:Number=100;
        var curseur_dessin:Number=1;
        while (curseur_dessin<pas_dessin+1)
            {
            conteneur_mc.fond_mc.lineTo(-taille*(1-curseur_dessin/pas_dessin),-taille*Math.sqrt(curseur_dessin/pas_dessin*(2-curseur_dessin/pas_dessin)));
            curseur_dessin++;
            }
        curseur_dessin=1;
        while (curseur_dessin<pas_dessin+1)
            {
            conteneur_mc.fond_mc.lineTo(taille*Math.sqrt(curseur_dessin/pas_dessin*(2-curseur_dessin/pas_dessin)),-taille*(1-curseur_dessin/pas_dessin));
            curseur_dessin++;
            }
        curseur_dessin=1;
        while (curseur_dessin<pas_dessin+1)
            {
            conteneur_mc.fond_mc.lineTo(taille*(1-curseur_dessin/pas_dessin),taille*Math.sqrt(curseur_dessin/pas_dessin*(2-curseur_dessin/pas_dessin)));
            curseur_dessin++;
            }
        curseur_dessin=1;
        while (curseur_dessin<pas_dessin+1)
            {
            conteneur_mc.fond_mc.lineTo(-taille*Math.sqrt(curseur_dessin/pas_dessin*(2-curseur_dessin/pas_dessin)),taille*(1-curseur_dessin/pas_dessin));
            curseur_dessin++;
            }
        conteneur_mc.fond_mc.endFill();
        }
     
    private function dessine_grande_aiguille()
        {
        conteneur_mc.createEmptyMovieClip("grande_aiguille_mc",profondeur_Grande_Aiguille);
        conteneur_mc.grande_aiguille_mc.lineStyle(1,couleur_grande_aiguille);
        conteneur_mc.grande_aiguille_mc.moveTo(0,0);
        conteneur_mc.grande_aiguille_mc.beginFill(couleur_grande_aiguille,100);
        conteneur_mc.grande_aiguille_mc.lineTo(-Math.floor(12*taille/100),-Math.floor(68*taille/100));
        conteneur_mc.grande_aiguille_mc.lineTo(0,-8*taille/10);
        conteneur_mc.grande_aiguille_mc.lineTo(Math.floor(12*taille/100),-Math.floor(68*taille/100));
        conteneur_mc.grande_aiguille_mc.lineTo(0,0);
        conteneur_mc.grande_aiguille_mc.endFill();   
        angle_grande_aiguille=0;
        }
     
    private function dessine_petite_aiguille()
        {
        conteneur_mc.createEmptyMovieClip("petite_aiguille_mc",profondeur_Petite_Aiguille);
        conteneur_mc.petite_aiguille_mc.lineStyle(1,couleur_petite_aiguille);
        conteneur_mc.petite_aiguille_mc.moveTo(0,0);
        conteneur_mc.petite_aiguille_mc.beginFill(couleur_petite_aiguille,100);
        conteneur_mc.petite_aiguille_mc.lineTo(-Math.floor(9*taille/100),-Math.floor(51*taille/100));
        conteneur_mc.petite_aiguille_mc.lineTo(0,-6*taille/10);
        conteneur_mc.petite_aiguille_mc.lineTo(Math.floor(9*taille/100),-Math.floor(51*taille/100));
        conteneur_mc.petite_aiguille_mc.lineTo(0,0);
        conteneur_mc.petite_aiguille_mc.endFill();
        angle_petite_aiguille=0;   
        }
     
    public function setPos(pos:Array)
        {
        place=pos;
        conteneur_mc._x=place[0];
        conteneur_mc._y=place[1];
        trace("place : "+place[0]+";"+place[1]);
        }
     
    public function setHeure(uneheure:Array)
        {
        heure=uneheure;
        angle_grande_aiguille=heure[1]*6;
        angle_petite_aiguille=heure[0]*30+heure[1]*0.5;
        conteneur_mc.petite_aiguille_mc._rotation=angle_petite_aiguille;
        conteneur_mc.grande_aiguille_mc._rotation=angle_grande_aiguille;
        }
     
    public function getHeure():Array
        {
        return heure;
        }
     
    }

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 01/03/2015, 16h52
  2. Réponses: 8
    Dernier message: 26/03/2011, 20h40
  3. utilisation class tween pour un clip qui se trouve dans un clip
    Par toffis dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 03/09/2009, 16h07
  4. Réponses: 2
    Dernier message: 12/01/2009, 13h24
  5. Réponses: 1
    Dernier message: 13/03/2006, 22h47

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