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 3 Discussion :

[AS3] Problème de cast


Sujet :

ActionScript 3

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut [AS3] Problème de cast
    Salut à tous,

    Voilà plusieurs jours que je suis bloqué sur un problème de cast .

    J'ai une classe personalisée Vignette qui extends Sprite, les objets vignette sont contenus dans un objet canvas.
    Je tente de récupérer une à une chaque vignette pour appeller une méthode de Vignette.

    Voilà les techniques de conversion des specifications d'AS3 que j'ai testé:

    conversion implicite :
    var vignette : Vignette = canvas.getChildAt(i);
    à la compilation j'obtiens directement l'erreur "1118: Implicit coercion of a value with static type flash.display: DisplayObject to a possibly unrelated type Vignette"

    utilisation de cast
    var vignette : Vignette = Vignette( canvas.getChildAt(i) );
    là ça compile mais une fois que la fonction contenant ce code est apellé j'obtiens l'erreur "1034: Echec de la contrainte de type : conversion de flash.display::Sprite@1a533f51 en Vignette impossible."

    utilisation de l'opérateur as
    var vignette : Vignette = canvas.getChildAt( i ) as Vignette;
    ça compile et à l'appel de la fonction Error "1009: Il est impossible d'accéder à la propriété ou à la méthode d'une référence d'objet nul".

    J'ai voulu vérifier la nature de vignette en traçant les valeurs ''vignette is Vignette", "vignette is Sprite" et "vignette is DisplayObject" et dans tous les cas j'obtiens false, assez bizarre!!

    Voilà je m'arrache un peu les cheveux alors j'espère que quelqu'un pourra m'aider.
    Merci.

  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,

    Visiblement tu dois avoir un problème de ciblage quelque part... Ta classe Vignette étend bien MovieClip ou Sprite ? As-tu essayé de tracer ce que tu récupères ???

    @++
    Libzippp (C++)
    Lost in AStorm

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Salut Isydore,

    En premier lieu, vérifie que tu ais bien fait un
    import flash.display.Sprite
    dans ta classe Vignette et dans celle que tu utilise pour fouiller dans canvas.

    Si tu désires seulement fouiller chaque propriété d'un objet (de l'objet canvas qui lui contient tes objets Vignette), utilise une boucle for...in et trace des données pour commencer à comprendre ce qui ne va pas...
    Par ailleurs, je ne vois pas pourquoi tu tentes des type cast. Si tu cherches au mauvais endroit et que tu essaies des trucs qui n'ont rien à voir, c'est normal d'avoir d'autres messages d'erreur qui surviennent à gauche et à droite.


    Design Cyboïde

  4. #4
    Membre habitué
    Homme Profil pro
    Creative Technologist
    Inscrit en
    Avril 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Creative Technologist

    Informations forums :
    Inscription : Avril 2007
    Messages : 126
    Points : 174
    Points
    174
    Par défaut
    Hummm...

    Ta première erreur
    var vignette:Vignette = convas.getChildAt(i);
    est normale, car dans la doc, il est spécifié que getChildAt() renvoie un DisplayObject, pas un Vignette.

    Les deux autres solutions devraient fonctionner. Je ne comprends pas la seconde erreur, a moins que l'objet renvoyé pas getChildAt() ne soit pas une vignette, mais autre chose.

    La dernière erreur semble indiquer que getChildAt() t'as renvoyé "null", à savoir qu'il n'y avait pas d'objet à cet index dans la pile graphique...

    Je pense que ton problème réside plutôt ailleurs que dans le cast. Il semble que tu essayes de récupérer des objets qui n'existent pas, ou qui existent ailleurs que là où tu essayes de les trouver.

    Une solution simple, serait de renseigner un Array au moment ou tu crées tes vignettes. C'est plus facile de faire une bouche sur un Array que sur la pile graphique.

    Sinon, pour aller dans ton sens, essaye d'abord d'afficher ce que contient ta pile graphique. A savoir, le nombre d'enfants, puis le type des enfants.
    Avec un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    trace("nb enfants:"+canvas.numChildren);
    for (var i:int=0; i<canvas.numChildren; i++) {
        if (canvas.getChildAt(i)==null) {
            trace(i+" est null");
        } else {
            trace(i+": "+flash.utils.getQualifiedClassName(canvas.getChildAt(i));
        }
    }
    J'ajoute que beaucoup de devs se font avoir en oubliant l'asynchronisme de l'affichage des composants mx. Un composant mx n'existe graphiquement qu'à partir du moment où il a été posé sur la scène, et seulement à la frame suivante. Il lui faut le temps de s'initialiser. C'est le sens de l'Event "creationComplete". Avant cela, il n'existe que virtuellement, et sa pile graphique n'est pas accessible (elle est null).

    Mais essaye déjà de regarder dans ton canvas comme je te l'ai montré, t'y verras certainement plus clair.

Discussions similaires

  1. Réponses: 0
    Dernier message: 17/12/2009, 11h52
  2. [JDBC Driver][JSTL] Problème de cast de données
    Par GyLes dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 27/09/2005, 10h00
  3. problème de cast!
    Par LaseLiep dans le forum Langage
    Réponses: 3
    Dernier message: 03/06/2005, 09h30
  4. Problème de cast/serialization/externalization ?
    Par Linlin dans le forum CORBA
    Réponses: 1
    Dernier message: 06/12/2004, 16h46
  5. [C#] Problème de casting de @IDENTITY
    Par bilb0t dans le forum Accès aux données
    Réponses: 7
    Dernier message: 03/09/2004, 09h42

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