Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flash > AS1/AS2
AS1/AS2 Questions relatives à la programmation ActionScript 1 et 2 (Cours AS2)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/01/2008, 22h40   #1
Invité de passage
 
Inscription : janvier 2008
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 9
Points : 3
Points : 3
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 :
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 :
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.
ar vuzhugenn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2008, 23h02   #2
Invité de passage
 
Inscription : janvier 2008
Messages : 9
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 9
Points : 3
Points : 3
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 :
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;
    }
 
}
ar vuzhugenn est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h17.


 
 
 
 
Partenaires

Hébergement Web