Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flash > AS3
AS3 Questions relatives à la programmation ActionScript 3 (Cours AS3)
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/08/2007, 11h37   #1
Invité de passage
 
Inscription : août 2007
Messages : 1
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 1
Points : 0
Points : 0
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.
Isydor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2007, 13h27   #2
Membre émérite
 
Avatar de thecaptain
 
Étudiant
Inscription : décembre 2003
Messages : 916
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2003
Messages : 916
Points : 898
Points : 898
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 ???

@++
__________________
API ScrollBar (AS2)
Masapi (Massive Loading API) (AS3)
Lost in AStorm
thecaptain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2008, 00h05   #3
Invité de passage
 
Inscription : 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
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
Cyboide est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/12/2008, 14h43   #4
Membre actif
 
Inscription : avril 2007
Messages : 126
Détails du profil
Informations personnelles :
Âge : 36
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : avril 2007
Messages : 126
Points : 150
Points : 150
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 :
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.
David Buff est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h32.


 
 
 
 
Partenaires

Hébergement Web