begin process at 2012 05 26 15:54:52
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Flash / Flash MX

 > 

Scripts

 > 

ActionScript

 > 

AS3: Manipuler un clip de la racine depuis une autre classe


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

AS3: Manipuler un clip de la racine depuis une autre classe

mercredi 12 mai 2010 à 00:04:24 | AS3: Manipuler un clip de la racine depuis une autre classe

Feizenbara

Bonsoir,

Après avoir bidouillé un peu avec Flash MX2004 en AS2, je viens de passer à CS4 avec AS3... et j'ai vraiment du mal à faire propre.

Mon soucis, c'est que j'ai une classe dont l'une des propriétés est un MovieClip qui se ballade sur ma scène principale. Et j'aimerai tester si cet objet entre en contact avec un autre MovieClip XXX à coup de "HitTest", complètement indépendant de ma classe.
Le problème c'est que je ne trouve aucun moyen dans mon fichier .as d'accéder au MovieClip XXX sur la scène principale. Imitant le sale _root d'AS2, je tente un parent.XXX ou un stage.XXX, mais le compilateur m'envoie bouler en sous entendant qu'il est possible qu'il n'y ait pas de XXX (merci le compilo qui me dit: "il est possible qu'il y ait une erreur, dans le doute je compile pas" ). Je ne peux pas non plus passer le XXX en paramètre de mthode de mon objet, la fonction qui va faire le HitTest est appelée par un eventListener. J'ai bien cru trouver la solution ici: http://www.flashkod.com/codes/COMMUNICATION-CLIP-CLIP-AS3_49743.aspx , mais je n'ai pas compris en quoi ses clips communiquaient à part par événements.
Enfin, j'aimerai vraiment éviter de piloter ce HitTest depuis ma scène principale parce qu'il va y avoir beaucoup d'objets qui vont se bousculer (donc des listes à gérer s'il faut passer par là), alors s'ils pouvaient se débrouiller tous seuls, ça serait mieux.

Merci de m'avoir lu en tout cas.

PS: en question bonux gratuite, y'a vraiment plus moyen d'avoir une doc aussi claire et simple d'utilisation avec CS4 qu'avec les version antérieures? Juste un truc où je tape un nom de fonctio net j'ai la description détaillée comme au bon vieux temps? Je trouve tout et n'importe quoi sauf ce que j'aimerai avec http://help.adobe.com/fr_FR/Flash/10.0_Welcome/ .
mercredi 12 mai 2010 à 12:10:09 | Re : AS3: Manipuler un clip de la racine depuis une autre classe

dj_ouf

Salut,

2 pistes :
- ta classe que tu utilises est-elle bien affichée sur ta scène ?
- as-tu activé le débogage dans les paramètres de publication, afin d'avoir des messages du compilo plus clairs.

Ensuite cela dépend encore de 2 choses :
- Ta classe correspond-elle à la classe du document, donc celle héritée directement de "root" ? et dans ce cas tu peux accéder aux objets graphiques placés sur ta scène directement dès le constructeur.
- Si ta classe est séparée puis déstiné à être affichée sur la scène, il faut bien faire attention de ne pas tenter d'accéder au root dans le constructeur, car tant que l'objet n'est pas compris dans la displaylist, il ne peut en aucun cas accéder à ses parents.
Dans ce cas, il faut déclarer un addEventListener(Event.ADDED, onAddedToStage) dans le constructeur, et la fonction onAddedToStage est déclenché dès que l'objet est ajouté à la displayList.

ps : pour ta question bonus, c'est comme tu veux mais je ne saurais que te conseiller que de rétrograder de version à la CS3, bien plus stable, moins beugée et moins pompeuse. De plus pour la doc, il ne va pas te la chercher en ligne mais t'ouvre le panel d'aide comme tu aurais pu l'avoir avec as2.
La preuve que CS4, c'est du ADAUBE. http://www.envrac.org/index.php/Flash-cs4-pros-cons, perso je n'ai pas acquéris la CS4, et j'attends la CS5 qui semble se rattraper..
mercredi 12 mai 2010 à 15:09:27 | Re : AS3: Manipuler un clip de la racine depuis une autre classe

Feizenbara

Merci du conseil de downgrade vers CS3, je crois que c'est ce que je vais faire tellement l'aide me manque.
Et je vais chercher cette histoire de débugage dans les paramètres de publication, je n'avais pas vu.

Sinon pour tes questions:
oui ma classe s'affiche, tout marche apparemment, c'est juste que je n'arrive pas vraiment à manipuler mon movieclip Z qui est sur la scène.

En me relisant, je m'aperçois que je ne suis pas clair du tout (surement qu'après 2h de prise de tête à minuit, je peux être excusé), donc je vais rentrer plus précisément dans mon problème:

J'ai une scène avec un movieClip XXX. Lui, il sera toujours existant, je suis sûr de son existence.
A côté de ça, j'ai une classe dans un fichier ClassYYY.as à part qui "pilote" sur la même scène un movieclip YYY (YYY est une propriété de ClassYYY, donc pas de soucis pour lui).
Mes fichiers communiquent bien, tout va nickel, mais le problème c'est:
Dans ma classe ClassYYY, j'ai une fonction déclenchée par un eventListener donc, je ne peux pas passer de paramètre à cette fonction. Mais dans cette fonction, j'aimerai tester la collision entre YYY et XXX... Comment je fais donc pour accéder à XXX ?

J'ai cru lire que mon seul salut reposait sur le fait de créer ma propre classe d'evénement pour transmettre XXX dans mon événement, mais ça me semble trèèèès sale, autant que je code tout à la racine du doc si c'est pour faire ça :(

Voilà, peut être est-ce plus clair, et merci encore dj ouf, je regarde le mode débugage ce soir en rentrant ;)
mercredi 12 mai 2010 à 16:08:46 | Re : AS3: Manipuler un clip de la racine depuis une autre classe

dj_ouf

Oky, merci pour ces précisions.

Le mieux je pense est que tu puisses accéder à la scène principale par le biais de ta classeYYY.as, car avec la racine, tu accèdes sans aucuns soucis à ses enfants.
Donc la question est : comment accéder à cette scène principale ?
Tu as affirmé au-dessus :
Code ActionScript :
Imitant le sale _root d'AS2, je tente un parent.XXX ou un stage.XXX

Cela me semble pourtant être la bonne méthode. Pour t'aider à savoir ce qui fait planter l'exécution, j'aurais besoin de savoir où se situe cette classe dans la liste d'affichage :
- soit c'est la classe du document, donc le point d'entrée.
- la classe est instanciée est affichée depuis le scénario principale
- ou alors est-ce que c'est la classe associée à un symbole de la bibliothèque, qui est placé sur la scène ?
mercredi 12 mai 2010 à 19:25:58 | Re : AS3: Manipuler un clip de la racine depuis une autre classe

Feizenbara

Je crois que c'est le deuxième cas, ou ptet le troisième:
YYY est instanciée dans le scénario principal en copiant un MovieClip de la bibliothèque, voilà le code de la fonction que j'utilise sur le scénario principal:

Code ActionScript :
function duplicateClip(aDupe:MovieClip):MovieClip
{
	var targetClass:Class = Object(aDupe).constructor;
	var duplicate:MovieClip = new targetClass();
	addChild(duplicate);
	return(duplicate);
}


Ensuite, il est simplement associé à un objet de type ClassYYY en faisant monInstanceClassYYY.monClip = YYY; (sachant que monClip est une propriété de ClassYYY).

ET à chaque fois que je tente parent.XXX ou stage.XXX dans mon code de la ClassYYY, le compilo m'indique "1119: Accès à la propriété Marine peut-être non définie, via la référence de type static flash.display:Stage."
mercredi 12 mai 2010 à 19:27:29 | Re : AS3: Manipuler un clip de la racine depuis une autre classe

Feizenbara

Vu que j'ai fait un copier-coller violent: Marine dont parle le compilo c'est le clip XXX depuis le début :)
vendredi 14 mai 2010 à 09:42:35 | Re : AS3: Manipuler un clip de la racine depuis une autre classe

dj_ouf

Réponse acceptée !
ok

visiblement, il tente de récupérer le mc "marine" directement depuis stage. Ce qu'il n'y arrivera pas car Stage contient déjà la scène principale en 1er lieu.

Fais le test avec ceci, tu comprendras bien :
Code ActionScript :
trace(stage.getChildAt(0));

Il t'affichera en sortie "[object MainTimeline]" -> on a donc récupéré notre scène principale.

Ensuite on veut récupérer le mc "marine" affichée sur la scène principale.
Or la propriété "marine" n'existe pas sur MainTimeline. Il faut donc "caster" l'objet MainTimeline en MovieClip, ce qui aura effet de lui indiquer en quel type il doit le traiter. On veut MovieClip, car c'est une classe dynamique et elle peut avoir n'importe quoi en propriété.

Voilà donc notre code :
Code ActionScript :
trace(MovieClip(stage.getChildAt(0)).marine);


Bon par contre, c'est un peu "bidouille" car on passe par stage, c'est mieux de passer par parent ^^.
lundi 17 mai 2010 à 21:22:53 | Re : AS3: Manipuler un clip de la racine depuis une autre classe

Feizenbara

>>> trace(MovieClip(stage.getChildAt(0)).marine);

J'ai envie de dire: Alleluia ça marche comme sur des roulettes.

Il me manquait donc un niveau d'abstraction et un cast.
Je vais me débrouiller comme ça, même si effectivement c'est de la bidouille, mais c'est bien mieux que ce que j'aurai fini par faire sinon.


Merci mille fois pour ce coup de main en tout cas!


Cette discussion est classée dans : clip, classe, passer, xxx, as3


Répondre à ce message

Sujets en rapport avec ce message

passer une variable d'un clip swf à un autre clip swf ? [ par gdemierre ] Bonjour à tous,Voila le topo :Dans le premier clip j'ai un bouton et une variable (var1 = "abc")Kan je clique sur le bouton je load un nouveau clip et Classe extend MovieClip AS 2 probleme [ par Prouprou_Sensei ] Salut a tous!J'ai un petit probleme avec une de mes animations. Clairement j'ai un clip sur la scene et je voudrais le convertir en une autre classe.M Pleins de petites questions d'un débutant....HELP PLEASE!! [ par juju2chaussette ] Salut à tous,Je sui en stage info et je débute en Flash, je dois à partir récupérer les données d'un fichier XML et les afficher dans mon doc Flash : passer à la Séquence 2 grace à un CLIP [ par paralaile ] ¨Bonjour , j'essaye de passer de la   Séquence 1   à la    Séquence 2  grace à un clip, mais je n'y arrive pas .onClipEvent (load) {     temps = getTi Evenement de clip qui pointe sur une fonction d'une classe [ par francois44 ] Bonjour,Je suis en train de créer une classe créant des clips à la dynamiquement pour réaliser un menu. La première étape sui consiste à créer le menu classe personnalisée et DepthManager [ par fredericleput ] j'ai construit une petite classe Element pour tester quelques petits trucs. Elle contient une propriété _mcConteneur de type MovieClip qui me sert à a attacher un movieclip à chacun des objets de ma classe [ par phpemilie ] Bonjour,J'ai créé une classe et je voudrais qu'à chacun des objets de cette classe soit rattaché un movieclip que je pourrais manipuler sur la scène.M Classe et createEmptyMovieClip [ par ludm ] BOnjour,J'ai créé une classe, dans son constructeur, je fais un :monClip=createEmptyMovieClip("clip",1);puis monClip.loadMovie("adresse.swf");Quand je passer des variables a un clip dupliqué plusieurs fois [ par MrdJack ] Bonjour et merci d'accorder un peu de temps,     Je suis en train de programmer un menu en actionscript pour mon site avec un chargement des variable Flash 9 / AS3 + Socket MySQL question [ par _benjy ] Salut @ tous...Bon j'imgine que certain d'entre vous sont au courant de la publication de Flash 9 Alpha. Perso je l'ai recup av hier, et autant le dir


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,624 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales