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 17/06/2007, 14h50   #1
Candidat au titre de Membre du Club
 
Inscription : janvier 2003
Messages : 44
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : janvier 2003
Messages : 44
Points : 13
Points : 13
Envoyer un message via MSN à christophe D
Par défaut Probleme d'acces a une variable public

Bonjour,

Depuis quelque temps je m'interesse a flash.
pour cela j'utilise pour le moment des outils libres type MTASC , e-anim

donc j'ai reussi a creer une petite class sans trop de soucis

afin de pouvoir utiliser certaine variable de ma class , elle sont public

mais la je recontre un probleme

j'ai une variable public sel_obj

mon probleme je cree un MovieClip , avec un fonction onPress
or le probleme et que la fonction onPress et du type static, et que les fonctions static ne peuvent utilise et ou modifier des variables ou fonction public

il y a t'il un moyen de contourne le probleme ??

ou alors je dois modifier ma class entierement en static ?
mais dans ce cas comment conserver mes variables public ...

bon je suis pas un expert en actionScript, je compte sur votre comprehension ....
christophe D est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2007, 16h31   #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,

Tu pourrais coller le code intérésé ?
CR_Gio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2007, 16h44   #3
Candidat au titre de Membre du Club
 
Inscription : janvier 2003
Messages : 44
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : janvier 2003
Messages : 44
Points : 13
Points : 13
Envoyer un message via MSN à christophe D
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
 
class classe.Boite_sel {
 
// declaration public
 
    public var ob_visible : Number = 8;    // nombre de ligne visible
    public var largeur    : Number = 100;  // largeur par defaut de la boite de selection
    public var obj_sel    : Number = -1;   // objet en cours selectionner
    public var pos_x      : Number = 0;    // position en x de la boite
    public var pos_y      : Number = 0;    // position en y de la boite
 
 
    public var coul_fond  : Number = 0xE0E0E0; // couleur de fond de la boite
    public var coul_sel   : Number = 0x808080; // couleur de l'objet selectionne
 
// declaration prive
 
    private var liste_obj   : Array = new Array(); // liste des objets
    private var cell_height : Number;              // hauteur d'une cellule
    private var base        : MovieClip;           // la base de la boite
    private var masque      : MovieClip;           // le masque de la boite
    private var set_obj_sel : Function;
    private var get_obj_sel : Function;
 
    static var rtest:Number;
 
// fonction public qui redessine la boite
 
    public function re_dessine() {
        masque.clear();
        base.clear();
        masque.lineStyle(1,0xFFFFFF);
        masque.moveTo(pos_x-1,pos_y-1);
        masque.beginFill(0xFFFFFF);
        masque.lineTo(pos_x+largeur+1,pos_y-1);
        masque.lineTo(pos_x+largeur+1,pos_y+cell_height*ob_visible+1);
        masque.lineTo(pos_x-1,pos_y+cell_height*ob_visible+1);
        masque.endFill();
 
        base.lineStyle(1,0x000000);
        base.moveTo(pos_x,pos_y);
        base.beginFill(coul_fond);
        base.lineTo(pos_x+largeur,pos_y);
        base.lineTo(pos_x+largeur,pos_y+cell_height*ob_visible);
        base.lineTo(pos_x,pos_y+cell_height*ob_visible);
        base.endFill();
 
        for (var i=0;i<liste_obj.length;i++) {
            if (base["valeur"+i]==undefined) {
                base.createEmptyMovieClip("valeur"+i,base.getNextHighestDepth());
                base["valeur"+i].createTextField("obj",base.getNextHighestDepth(),pos_x+1,pos_y+i*cell_height,
                    largeur-1,cell_height);
                base["valeur"+i].obj.selectable=false;
 
 
                base["valeur"+i].onPress = function() {
                    var nom:String = this["valeur"+i]._name;
                    var pos:String = nom.substr(6,nom.length-7);
                    Boite_sel.re_dessine();
                    }
            }
            base["valeur"+i].obj.text=liste_obj[i];
            base["valeur"+i].obj._x=pos_x+1;
            base["valeur"+i].obj._y=pos_y+i*cell_height;
            if (i==obj_sel) {
                base["valeur"+i].obj.backgroundColor=coul_sel;
                base["valeur"+i].obj.background=true;
            }
 
        }
    }
 
// le constructeur de la boite
    public function Boite_sel(dest:MovieClip) {
        liste_obj.push("ligne 1");
        liste_obj.push("ligne 2");
        var dim_txt : Array = new Array();
        dim_txt= Commune.Taille_txt("Pg testing");
        cell_height=dim_txt[1];
        if (base==undefined) {
            base = dest.createEmptyMovieClip("base",dest.getNextHighestDepth());
            masque = dest.createEmptyMovieClip("masque",dest.getNextHighestDepth());
            base.setMask(masque);
        }
 
        re_dessine();
// les fonctions de mise a jour automatique de couleur/position... de la boite
        var m_pos_x :Function = function(prop,oldVal,newVal) {
            this.pos_x=newVal;
            this.re_dessine();
            return newVal;
        }
        this.watch("pos_x",m_pos_x);
 
        var m_pos_y :Function = function(prop,oldVal,newVal) {
            this.pos_y=newVal;
            this.re_dessine();
            return newVal;
        }
        this.watch("pos_y",m_pos_y);
 
        var m_coul_fond:Function = function(prop,oldVal,newVal) {
            this.coul_fond=newVal;
            this.re_dessine();
            return newVal;
        }
        this.watch("coul_fond",m_coul_fond);
 
        var m_coul_sel:Function = function(prop,oldVal,newVal) {
            this.coul_sel=newVal;
            //this.re_dessine();
            return newVal;
        }
        this.watch("coul_sel",m_coul_sel);
   }
 
}
c'est cette partie la qui pose probleme

Code :
1
2
3
4
5
6
 
                base["valeur"+i].onPress = function() {
                    var nom:String = this["valeur"+i]._name;
                    var pos:String = nom.substr(6,nom.length-7);
                    Boite_sel.re_dessine();
                    }
avec MTASC j'ai l'erreur suivante
Citation:
type error classe.Boite_sel has no static field re_dessine
merci de votre patience
christophe D est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2007, 19h02   #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
Bojour

je ne comprend pas pourquoi avoir mis :
Code :
Boite_sel.re_dessine();
Ne voulais tu pas plutot ecrire :
Autre chose,
Pourquoi ecrire :
Code :
1
2
3
4
5
6
        var m_pos_x :Function = function(prop,oldVal,newVal) {
            this.pos_x=newVal;
            this.re_dessine();
            return newVal;
        }
        this.watch("pos_x",m_pos_x);
Quand tu peu écrire:
Code :
1
2
3
4
5
6
 
public function set posX(num:Number):Void
{
  this.pos_x=newVal;
  this.re_dessine();
}
PS: envoi tout le code si probleme encore ( static main(){} etc .. )
CR_Gio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2007, 21h20   #5
Candidat au titre de Membre du Club
 
Inscription : janvier 2003
Messages : 44
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : janvier 2003
Messages : 44
Points : 13
Points : 13
Envoyer un message via MSN à christophe D
j'ai fait une correction dans

Code :
1
2
3
4
5
6
 
base["valeur"+i].onPress = function() {
var nom:String = this["valeur"+i]._name;
var pos:String = nom.substr(6,nom.length-7);
Boite_sel.re_dessine();
}
j'ai change this["valeur"+i]._name; par this.name;
et nom.substr(6,nom.length-7); par nom.substr(6,nom.length-6);

erreur de saisie !!
bon ca c'est une chose ...

Citation:
Envoyé par CR_Gio
Bojour

je ne comprend pas pourquoi avoir mis :
Code :
Boite_sel.re_dessine();
Ne voulais tu pas plutot ecrire :
a quel niveau ??
ca si c'est dans ma fonction qui me pose soucis , si je remplace Boite_sel par this on sera sur l'objet base["valeur"+i] et nom pas l'objet class Boite_sel ? ce que cherche justement a modifier une propriete, ou je fais fausse route ??

Citation:
Envoyé par CR_Gio
Autre chose,
Pourquoi ecrire :
Code :
1
2
3
4
5
6
        var m_pos_x :Function = function(prop,oldVal,newVal) {
            this.pos_x=newVal;
            this.re_dessine();
            return newVal;
        }
        this.watch("pos_x",m_pos_x);
Quand tu peu écrire:
Code :
1
2
3
4
5
6
 
public function set posX(num:Number):Void
{
  this.pos_x=newVal;
  this.re_dessine();
}
pour cela c'est vrai que je sers d'un exemple d'un wiki , pour ajouter un ecouteur sur une variable

peut etre que l'utilisation que j'en fais est peut etre pas correct !!

autrement la source ici , est totalement autonome c'est une class personnalise pour palier le manque d'un TlistBox (allusion au Pascal)


Mais dans le fond , mon probleme et que je peux toujours depuis la fonction onPress d'un MovieClip modifier une variable public de la ma class boite_sel


PS:Je suis encore debutant en flash , et surtout je travail pas avec des logiciels commerciaux, la programmation etant pour moi surtout un plaisir que j'essaie de partarger avec d'autre passionne ...

Encore merci de ta patience
christophe D est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2007, 16h45   #6
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
Pour palier a la premier erreur, j'ai fais ca :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
        var myClassInstance:BoiteSel=this;

        for (var i=0;i<liste_obj.length;i++)
        {
                 //[...]
                base["valeur"+i].onPress = function()
                {
                    var nom:String = this["valeur"+i]._name;
                    var pos:String = nom.substr(6,nom.length-7);
                    myClassInstance.re_dessine();
                  }
                 //[...]
        }
J'ai donc crée une nouvelle variable myClassInstance qui contien une reference de mon instance de la class boite_sel ce qui permet d'avoir acces a re_dessine()
CR_Gio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2007, 18h29   #7
Candidat au titre de Membre du Club
 
Inscription : janvier 2003
Messages : 44
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : janvier 2003
Messages : 44
Points : 13
Points : 13
Envoyer un message via MSN à christophe D
je vais tester ca , je vous tiens au courant ..

merci
christophe D est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2007, 18h40   #8
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 me suis penché un peu plus sur ta source et .... a mon avis tu va avoir encore pas mal de probleme :p

Il y a un probleme au niveau du beginfilld qui cache les textes,

Au niveau du for(var i=0;....) MTASC ne m'a pas pris en compte; il a fallu declarrer la variable i en dehors de la boucle for.

Et meme en générale, la stucture de ta class est un peu compliqué je trouve ...
CR_Gio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2007, 23h10   #9
Candidat au titre de Membre du Club
 
Inscription : janvier 2003
Messages : 44
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : janvier 2003
Messages : 44
Points : 13
Points : 13
Envoyer un message via MSN à christophe D
Citation:
Envoyé par CR_Gio
Je me suis penché un peu plus sur ta source et .... a mon avis tu va avoir encore pas mal de probleme :p

Il y a un probleme au niveau du beginfilld qui cache les textes,

Au niveau du for(var i=0;....) MTASC ne m'a pas pris en compte; il a fallu declarrer la variable i en dehors de la boucle for.

Et meme en générale, la stucture de ta class est un peu compliqué je trouve ...
j'ai pas eu d'erreur !
c'est vrai que for(var i:Number=0;....) serais quand meme mieux !!!

bon ca marche !!!
j'ai corrige aussi une bricole dans la fonction
Code :
1
2
3
4
5
 
          if (i==obj_sel) {
                base["valeur"+i].obj.backgroundColor=coul_sel;
                base["valeur"+i].obj.background=true;
            }
c'est devenu

Code :
1
2
3
4
5
6
7
 
          if (i==obj_sel) {
                base["valeur"+i].obj.backgroundColor=coul_sel;
                base["valeur"+i].obj.background=true;
            } else {
base["valeur"+i].obj.background=false;
}
Merci ca MARCHE !!!

bon autrement , c'est quoi tu trouve de lourd/compliquer ?? dans ma class ??

peut etre une maniere peu etre peu orthodoxe ??
c'est fort possible !!!
j'ai du contourne d'autre probleme pour arrive a mes fins , mais la solution et peut etre pas la meilleur !!

Encore mille merci pour ta patience
christophe D est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2007, 23h25   #10
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
exemple :

Code :
1
2
3
4
5
6
7
8
9
10
 
			this.mc_BoiteSel.base["valeur"+i].onPress = function()
			{
				myClass.obj_sel.obj.background=false;
 
				this.obj.backgroundColor=0x00FF00;
				this.obj.background=true;
 
				myClass.obj_sel=this;
			}
Tu pourai mettre un exemple en ligne ?
CR_Gio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2007, 23h36   #11
Candidat au titre de Membre du Club
 
Inscription : janvier 2003
Messages : 44
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : janvier 2003
Messages : 44
Points : 13
Points : 13
Envoyer un message via MSN à christophe D
Citation:
Envoyé par CR_Gio
exemple :

Code :
1
2
3
4
5
6
7
8
9
10
 
            this.mc_BoiteSel.base["valeur"+i].onPress = function()
            {
                myClass.obj_sel.obj.background=false;
 
                this.obj.backgroundColor=0x00FF00;
                this.obj.background=true;
 
                myClass.obj_sel=this;
            }
Tu pourai mettre un exemple en ligne ?
j'ai encore du mal avec ce this , c'est pas encore automatique !!

voila le resultat : http://c.diot.free.fr/dvp/
clicque sur oui !!
la boite de dialogue je l'ai aussi realiser avec MATSC
christophe D 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 20h45.


 
 
 
 
Partenaires

Hébergement Web