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 01/01/2008, 18h02   #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 cliquer sur des clips générés par actionscript

Bonjour,
Voici mon problème.
Par exemple :
je crée un tableau de cases de la façon suivante :

mescases=new Array(100);
for (i=0;i<100;i++) { mescases[i]=new UneCase(sesparametres,"case"+i+"_mc",this,profondeur) }


UneCase étant une classe dynamic extends MovieClip munie de plein de fonctions.

Je voudrais qu'une fonction se déclanche morsque je clique sur la case (par exemple la fonction changeCouleur définie dans le fichier de classe).
Pour l'instant la seule technique que j'ai trouvée c'est d'écrire dans le fichie .fla quelque chose du genre :

case0_mc.onPress=function() { mescases[0].changeCouleur();}
case1_mc.onPress=function() { mescases[0].changeCouleur();}


quand il n'y a que 10 objets, passe encore, mais au delà c'est dur à gérer.

J'ai essayé de mettre un onPress dans le fichier de construction de la classe UneCase mais sans effet intéressant.

D'avance merci à qui pourrait m'aider !
ar vuzhugenn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2008, 12h56   #2
Inactif
 
Avatar de CR_Gio
 
Inscription : septembre 2005
Messages : 1 196
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 1 196
Points : 1 201
Points : 1 201
Bonjour,

Citation:
J'ai essayé de mettre un onPress dans le fichier de construction de la classe UneCase mais sans effet intéressant.
C'est pourtant cela qui est intérésant

Pourai tu nous montré le code de ta cass ? ( essai de nous montrer que le neccessaire )
CR_Gio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2008, 16h43   #3
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 Deux exemples de ce qui ne fonctionne pas

Avec une droite :
Objectif : une droite se dessine à l'écran, en cliquant dessus il faudrait qu'elle change de couleur.

Le texte de la classe :

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
 
//////////////////
/* UneDroite.as */
//////////////////
 
dynamic class UneDroite extends MovieClip
{
public var parametres:Array;
public var coefficient:Number;
public var ordonneeorigine:Number;
public var abscisseconstante:Number;
public var nom:String;
public var estverticale:Boolean;
public var echelle:Number;
 
private var conteneur_mc:MovieClip;
private var couleur:Number;
private var expression:String;
 
private var lescouleurs:Array;
private var numero_couleur:Number;
 
public var dimensions:Array;
 
public function UneDroite(param:Array,cible:MovieClip,dimens:Array,nm:String,profondeur:Number,pas:Number)
    {
    lescouleurs=new Array(0xFF0000,0x00FF00,0x0000FF,0xFF00FF,0xFF9900,0x00FFFF,0x660000,0x003300);
    numero_couleur=0;
    nom=nm;
    // équation de droite de type ax+by+c=0
    parametres=new Array(3);
    parametres=param;
    setExpression();
    // dimensions de la fenêtre
    dimensions=new Array(2);
    dimensions=dimens;
    // définit le pas de la grille
    echelle=pas;
    setCouleur(lescouleurs[numero_couleur]);
    conteneur_mc=cible.createEmptyMovieClip(nom,profondeur);
    conteneur_mc.clear();
    dessine();
    conteneur_mc.onPress=function()
        {
        trace("coucou");
        if (numero_couleur<7) numero_couleur++;
        else numero_couleur=1;
        setCouleur(lescouleurs[numero_couleur]);
        }        
    }
 
public function dessine()
    {
    conteneur_mc.lineStyle(1,couleur);
    if (parametres[1]==0) 
        {
        estverticale=true;
        abscisseconstante=-parametres[2]/parametres[0];
        conteneur_mc.moveTo(echelle*abscisseconstante,-echelle*dimensions[1]/2);
        conteneur_mc.lineTo(echelle*abscisseconstante,echelle*dimensions[1]/2);
        }
    else
        {
        estverticale=false;
        coefficient=-parametres[0]/parametres[1];
        ordonneeorigine=-parametres[2]/parametres[1];
        if (coefficient==0)
            {
            conteneur_mc.moveTo(-echelle*dimensions[0]/2,-echelle*ordonneeorigine);
            conteneur_mc.lineTo(echelle*dimensions[0]/2,-echelle*ordonneeorigine);
            }
        else
            {
            if (Math.abs(-coefficient*dimensions[0]/2+ordonneeorigine)<=dimensions[1]/2)
                conteneur_mc.moveTo(-echelle*dimensions[0]/2,echelle*coefficient*dimensions[0]/2-echelle*ordonneeorigine);
            else conteneur_mc.moveTo(echelle*(-dimensions[1]/2-ordonneeorigine)/coefficient,echelle*dimensions[1]/2);
            if (Math.abs(coefficient*dimensions[0]/2+ordonneeorigine)<=dimensions[1]/2)
                conteneur_mc.lineTo(echelle*dimensions[0]/2,-echelle*coefficient*dimensions[0]/2-echelle*ordonneeorigine);
            else conteneur_mc.lineTo(echelle*(dimensions[1]/2-ordonneeorigine)/coefficient,-echelle*dimensions[1]/2);
            }
        }
    }
 
public function setCouleur(col:Number)
    {
    trace("coucouc");
    couleur=col;
    dessine();
    }
 
public function setPos(pos:Array)
    {
    conteneur_mc._x=pos[0];
    conteneur_mc._y=pos[1];
    }
 
public function setExpression()
    {
    expression="";
    switch (parametres[0])
        {
        case 0 : break;
        case 1 : expression+="x";break;
        case -1 : expression+="-x";break;
        default : expression=expression+parametres[0]+"x";break;
        }
    if ((parametres[0]!=0)&&(parametres[1]>0)) expression+="+";
    //trace(parametres[1]);
    switch (parametres[1])
        {
        case 0 : break;
        case 1 : expression+="y";break;
        case -1 : expression+="-y";break;
        default : expression=expression+parametres[1]+"y";break;
        }
    if (parametres[2]>0) expression+="+";
    if (parametres[2]!=0) expression+=parametres[2];
    expression+="=0";
    }
 
public function getExpression():String
    {
    return expression;
    }
 
}
remarque : j'ai rajouté des trace pour voir ce qui se passe … la fonction de changement de couleur ne s'actionne qu'à la construction de la droite même si l'action de la souris est bien détectée. J'ai rajouté des _root dans le onPress et rien n'y fait.

Deuxième exemple :
Objectif : Un objet prédessiné (une case ou autre) doit se déplacer sous l'action de la souris.

Texte de la classe :
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
 
////////////////
/* UnObjet.as */
////////////////
 
dynamic class UnObjet extends MovieClip
{
public var conteneur_mc:MovieClip;
private var type_objet:String;
public var place:Array;
public var bouge:Boolean=false;
 
 
public function UnObjet(sontype:String,sapos:Array,cible:MovieClip,nom:String,profondeur:Number)
    {
    type_objet=sontype;
    conteneur_mc=cible.attachMovie(sontype,nom,profondeur);
    setPos(sapos);
    conteneur_mc.onPress=function()
        {
        if (!_root.bouge) _root.bouge=true;
        else _root.bouge=false;
        trace(_root.bouge);
        }
    conteneur_mc.onMouseMove=function()
        {
        if (_root.bouge) 
            {
            sapos=new Array(_xmouse,_ymouse);
            _root.setPos(sapos);
            }
        }
    }
 
public function setPos(sapos)
    {
    conteneur_mc._x=sapos[0];
    conteneur_mc._y=sapos[1];
    }
 
public function getPos():Array
    {
    place=new Array(2);
    place[0]=conteneur_mc._x;
    place[1]=conteneur_mc._y;
    //trace(place[0]+" avec "+place[1]);
    return place;
    }
 
// pour tourner
public function tourne(angle:Number):Void
{
conteneur_mc._rotation+=angle;
}
 
public function changeImage()
    {
    if (conteneur_mc._currentframe==1) conteneur_mc.nextFrame();
    else conteneur_mc.prevFrame();
    }
 
public function getImage()
    {
    return conteneur_mc._currentframe;
    }
 
}
Remarque : la variable bouge change bien de valeur mais l'objet ne bouge pas …

Remarque finale : je ne suis pas très douée en flash non plus …
ar vuzhugenn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 22h08   #4
Inactif
 
Avatar de CR_Gio
 
Inscription : septembre 2005
Messages : 1 196
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 1 196
Points : 1 201
Points : 1 201
Je pense que tu devrai lire ce post : http://www.developpez.net/forums/sho...d.php?t=454418

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
dynamic class UneDroite extends MovieClip
{
    [...]
 
public function UneDroite( ... )
{
    [...]
    var ThisClass:UneDroite = this;
    conteneur_mc.onPress=function()
    {
        [...]
        ThisClass.setCouleur(...);
        [...]
    }
}
 
    [...]
}
CR_Gio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2008, 11h02   #5
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 Problème résolu

Merci, cela fonctionne très bien. Je vais essayer de l'adapter pour les autres événements …
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 13h33.


 
 
 
 
Partenaires

Hébergement Web