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 :

[CLASSES] Attributs non-static apparemment considérés comme static ?


Sujet :

ActionScript 1 & ActionScript 2

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Points : 77
    Points
    77
    Par défaut [CLASSES] Attributs non-static apparemment considérés comme static ?
    Bonjour à tous !

    1er message pour moi ici, donc je vous salue bien bas
    Voilà, j'ai quelques ptites notions de Flash, mais là je pige pas trop.
    J'ai une classe nommée ToolTipTextManager (oui, en fait après un rapide coup d'oeil j'ai pas trouvé de tooltiptexts pour les composants donc j'ai fait un manager voilou).

    Dans cette classe à la base j'avais des attributs static, genre des "defines" pour le délai d'affichage, et le délai de cachage (quel joli mot), mais le reste était NON STATIC :
    private var toolTipAreas:Array = new Array(); // Contient les rectangles sensibles au tooltip

    Et bien, quand je fais :
    var tttManager = new ToolTipTextManager();
    Le constructeur n'est meme pas appelé
    (je crée un tttManager pour chaque clip enfant que je load dans un container, donc à priori chaque tttManager est supprimé lorsque j'appelle removeMovieClip())

    Encore pire : si j'ajoute des tooltipAreas (public function addToolTipText(obj:Object, _ttt:String))
    Et bien ca vient s'ajouter a ceux du tttManager précédent qui normalement aurait du etre supprimé, ainsi que tous ses attributs non-static, lors de l'appel a removeMovieClip(). Et meme s'il n'avait pas été supprimé, il s'agit ici d'une autre instance de cette classe, qui devrait donc avoir un Array vide...

    Voila donc mon probleme, on dirait que Flash a considéré cet attribut comme étant static. Si quelqu'un sait pourquoi ? Je n'ai jamais eu ce probleme avant (j'ai fait un jeu style worms, donc j'ai un minimum de connaissances rudimentaires tout de meme)

    Merci de votre aide !

    Lideln

  2. #2
    Membre éprouvé
    Avatar de thecaptain
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Décembre 2003
    Messages
    919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Décembre 2003
    Messages : 919
    Points : 1 210
    Points
    1 210
    Par défaut
    Salut,

    c'est un bug connu de flash Pour que tes variables soient non-static, il faut les initialiser dans le constructeur (vé c'est con mais c'est comme ça).

    @++

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Points : 77
    Points
    77
    Par défaut
    Hello the captain !

    Merci pour ta réponse rapide
    Ah oki donc c'est un bug connu, c'est déjà rassurant, c'est pas moi code comme un goret :p
    D'accord, donc je les initialise à null dans leur déclaration, et je les instancie (new Array()) dans le constructeur...

    Sauf que comme je l'avais dit le constructeur n'est jamais appelé (j'avais mis un trace, jamais affiché).

    Est ce que si je fais :
    var tttManager = new ToolTipTextManager();
    C'est différent de :
    var tttManager:ToolTipTextManager = new ToolTipTextManager();

    ??

    Est ce que dans le 1er cas il est possible que le constructeur ne soit PAS appelé mais qu'il le soit que dans le 2eme ?

    Merci en tous cas pour cette réponse qui m'éclaire bien

    Lideln

  4. #4
    Membre éprouvé
    Avatar de thecaptain
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Décembre 2003
    Messages
    919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Décembre 2003
    Messages : 919
    Points : 1 210
    Points
    1 210
    Par défaut
    re,

    var tttManager = new ToolTipTextManager();
    var tttManager:ToolTipTextManager = new ToolTipTextManager();
    ces 2 écritures sont identiques MAIS la 1ère variable tttManager n'est pas typée : tu pourras mettre n'importe quoi dedans ==> déconseillé Sinon le fait que ton constructeur ne soit pas appelé, est-ce que tu ne t'es pas planté dans son nom ? Sinon poste la classe

    @++

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Points : 77
    Points
    77
    Par défaut
    Bien vu captain !

    function ToolTipManager()
    au lieu de
    function ToolTipTextManager()


    Bien joué, et merci du coup de main
    (par contre entre temps j'avais tout passé en static, me disant que de toutes facons l'instancier ne servirait à rien...)

    A+

    Lideln

    ps : pour le typage voui, je le fais tout le temps, pour que ce soit comme en C/C++ ou Java. Par contre je pensais que l'erreur venait de là et qu'on ne pouvait appeler le constructeur que sur une variable typée... Merci encore

  6. #6
    Membre éprouvé
    Avatar de thecaptain
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Décembre 2003
    Messages
    919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Décembre 2003
    Messages : 919
    Points : 1 210
    Points
    1 210
    Par défaut
    re,

    ouais le gros problème de flash (enfin je trouve) c'est le typage fort, ce qui fait que les gens ayant moins l'habitude du code (ceux ayant l'habitude aussi d'ailleurs) font facilement des erreurs et passent des heures à les chercher. Enfin avec AS3, le typage fort ne servira pas uniquement à la compilation, mais aussi au runtime donc y a un gros progès de ce coté-la

    @++

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 127
    Points : 77
    Points
    77
    Par défaut
    Oula ca sent la grosse mise a jour de flash là, je vais m'intéresser au sujet, histoire de pas être trop en retard ^^

    J'espère qu'ils feront un truc bien strict, bien sécurisé...

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

Discussions similaires

  1. [MySQL] zone de texte non lue ou considérée comme vide !
    Par abouilyas dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/06/2011, 23h24
  2. Réponses: 5
    Dernier message: 05/02/2011, 20h09
  3. StringBuffer en final static mais modifié comme meme
    Par amine_en_france dans le forum Langage
    Réponses: 2
    Dernier message: 13/11/2010, 12h27
  4. Utiliser une méthode non-static dans une méthode static
    Par mcfly37 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 18/08/2010, 11h41
  5. [Tableaux] Variable non considéré comme un chiffre
    Par Merlon dans le forum Langage
    Réponses: 7
    Dernier message: 27/06/2007, 12h08

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