|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Invité de passage
![]() Inscription : juillet 2005 Messages : 14 ![]() |
Bonjour, ceci est mon premier post et malheureusement commence par un problème...
Donc J'interface une animation Flash avec du XML. Je récupère les données dans un fichier externe et je voudrais qu'au survol d'un clip, je puisse reconstituer les données correspondantes à ce clip. Pour ça j'ai : Code :
Alors j'ai essayé de stocker les valeurs dans un tableau, mais je ne sais pas trop comment ça fonctionne vu que je débute en AS2 : après nomZone=eval.... j'ai rajouté ces lignes : Code :
Code :
Quand je teste Occ[0][0] il me met undefined. Si quelqu'un peu éclairer ma lanterne? |
||||||
|
|
00
|
|
|
#2 | ||||
|
Membre éclairé
![]() Inscription : juin 2005 Messages : 342 ![]() |
Hellop !!
d'abord, ceci est une erreur... Code :
Ce que tu cherche à faire, c'est ça : Code :
Ensuite, ça serai po mal si tu pointais vers Occ[i] plutot que NomZone ou Occ[0] lorsque tu affecte les gestionnaires d'évenements (dans la boucle for) Toi tu fais l'affectation du rollOver sur Occ[0], donc toujours à l'index 0, et tu fais l'affectation de rollOut et release sur NomZone, donc tu vas écraser à chaque fois les gestionnaires affectés pour qu'il ne reste plus que le dernier affecté à tous... Bon courage, à+ |
||||
|
|
00
|
|
|
#3 | ||||
|
Invité de passage
![]() Inscription : juillet 2005 Messages : 14 ![]() |
Ok merci, je suis en train de faire des tests
Pour les évenements c'était juste un test donc j'avais pas tout mis en définitif mais plutot des controles avec des trace. En fait un tableau à 2D c'est ce que je cherchais à faire mais je ne savais pas comment Par contre j'ai essayé comme ca: Code :
Donc là j'ai bien Occ[0]=0, Occ[1]=1, etc... mais quand je fais : Code :
Occ[i].push( [nomZone,titre,type,descr,lien,logo]); Par rapport aux gestionnaires d'évènements, en fait je ferai un truc du genre ? : Code :
|
||||
|
|
00
|
|
|
#4 |
|
Membre éclairé
![]() Inscription : juin 2005 Messages : 342 ![]() |
Hello !!
Occ[i].push( [nomZone,titre,type,descr,lien,logo]); ça, tu ne peux pas le faire, si Occ[i] n'a pas été défini. D'abord tu défini Occ = new Array(); mais ensuite, tu essaye tout de suite de faire Occ[i].push([...]); c'est juste Occ.push( [...] ); pas besoin de passer l'index... t'as intérêt à faire des tests avec les tableaux pour savoir un peu ce que tu fais, ça à pas l'air encore très clair... Sinon, ton dernier code semble Ok, l'affectation du rollOver se fait bien sur Occ[j][0], qui correspond au mc à l'index j. Bon courage, a++ |
|
|
00
|
|
|
#5 | ||
|
Invité de passage
![]() Inscription : juillet 2005 Messages : 14 ![]() |
Oui en effet, je ne crois pas avoir tout compris
Si je fais : (toujours dans la boucle) sans indice, il me met tout sur Occ[0] (pas d'autre indice créé) du coup Occ[0][...] ne me donne que la dernière entrée et ca revient au meme problème qu'avant Ce qu'il me faudrait c'est pour l'entrée 1 avoir les infos a, b, c, l'entrée 2 avoir les infos a', b', c' Donc je croyais que le i avait une place importante pour un tableau en 2D Code :
Occ.push(i); et directement après avec Occ.push([..]); mais quelquesoient les écritures que je fasse, hors de la boucle il me donne toujours la dernière entrée. j'ai également essayé Occ.push(i,[...]), Occ[i].push(i) ..., Occ.push([i],[...]), Là je dois admettre que je suis un peu perdue.... |
||
|
|
00
|
|
|
#6 |
|
Membre éclairé
![]() Inscription : juin 2005 Messages : 342 ![]() |
Ton problème est en réalité tout simple
Dans ta boucle, tu fais : Occ = new Array(); Occ.push( ... ); si tu fais "new Array()" dans la boucle, à chaque passage, Occ est réinitialisé en tant que tableau vide... Tu dois initialiser le tableau en dehors de la boucle (avant), puis ça fonctionnera correctement Bon courage, a++ |
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : juillet 2005 Messages : 14 ![]() |
ah mais oui!!!!!
Pfff!! ca fait je sais pas combien de temps que je planche sur mon anim et j'avais carrément oublié ce petit morceau de 3 mots.... et de le déplacer! Mille fois merci!!! |
|
|
00
|
|
|
#8 | ||
|
Invité de passage
![]() Inscription : juillet 2005 Messages : 14 ![]() |
Juste une pitite dernière question pour les évènements..
Code :
Comment je peux faire pour lui faire reconnaitre le j? |
||
|
|
00
|
|
|
#9 |
|
Membre éclairé
![]() Inscription : juin 2005 Messages : 342 ![]() |
Essaye de faire des traces...
trace( Occ[j][0] ); et tu regarde dans la fenêtre de sortie ce qu'il t'affiche... si c'est une simple chaine de caractères ou bien si c'est un objet (movieClip). ça te permettra déjà de savoir sur quoi tu pointe avec l'index 0... Après, à toi de faire les traces qu'il faut pour arriver à ton but Bon courage, a++ |
|
|
00
|
|
|
#10 |
|
Invité de passage
![]() Inscription : juillet 2005 Messages : 14 ![]() |
vivi j'en ai déjà fais pleins!
quand je fais un trace(Occ[j][0]) dans this.Occ[j][0].onRollOver ... il me met un undefined Quand je le met juste avant il me fait correctement la boucle "_level0......" J'ai l'impression que dans l'évenement il ne comprend pas la variable j Ah oui quand je fais un trace(typeof Occ[j][0]) (toujours hors de l'évenement) il me met bien 'movieclip' |
|
|
00
|
|
|
#11 | ||
|
Membre éclairé
![]() Inscription : juin 2005 Messages : 342 ![]() |
Si tu pouvais baliser ton code, ça serai po mal pour la lecture
tu mets ton code entre 2 balises {code} {/code} Attention, tu remplace les accolades { } par des crochets [ ]... car si je te met l'écriture avec des crochets, il va le parser en tant que code, et on verra rien... en fait, je le fais avec ton dernier code et je regarde si je trouve quelque chose de bizarre : Code :
A toute |
||
|
|
00
|
|
|
#12 | ||||||||||
|
Membre éclairé
![]() Inscription : juin 2005 Messages : 342 ![]() |
Arf, oui, bien sur, j'aurai du réagir tout de suite par rapport à ton message...
ça ne fonctionne pas de cette manière... tu fais une erreur de base... "this" représente la "portée courante". la portée, c'est l'emplacement ou est exécuté le code... Si tu place ton code sur la scène directement, on est sur la portée de la scène, _level0. Si tu place ton code dans un clip "test" qui est sur la scène, nous sommes alors dans la portée du clip "test", donc _level0.test Selon la portée, un code ne peut pas atteindre d'autre éléments directement... Par exemple, admettons que j'ai sur la scène 1 clip nommé "test1" ainsi qu'un clip nommé "test2". Si je code sur la scène, je peux les atteindre en faisant Code :
Maintenant, si je code dans "test1"... par exemple, sur la scène, je place ce code : Code :
Pourquoi donc ?? car je suis dans la portée du clip, et non plus celle de la scène. L'évenement onRollOver fait partie du clip, non pas de la scène, donc il est exécuté dans sa propre portée, celle du clip. Donc pour reprendre, toi tu fais : Code :
Mais ton erreur est minime, car il suffit de virer les "this" pour que ça fonctionne... Tu vas maintenant te demander pourquoi, alors que tu te trouve dans la portée du clip, tu pourrais atteindre Occ, qui lui est déclaré dans la portée de la scène... ça ne semble pas très logique, n'est-ce pas ?? Mais ça l'est, pourtant. Tout ton code est sur la scène (enfin, j'imagine). Si je fais : Code :
_level0.mc _level0.mc hello, , world hello, , world Je peux atteindre tab car il est déclaré dans le code au dessus, et l'affectation du gestionnaire se fait dans la portée de la scène (mc.onRollOver = function()) Maintenant, tu peux encore voir qu'on peut se déplacer pour pointer sur des éléments : dans le dernier code, j'ai fait : this._parent.tab d'abord this, qui pointe le clip "mc", ensuite, _parent qui pointe vers le parent de "this", qui est la scène, et enfin, à partir de la scène, je peux pointer sur "tab", le tableau que j'ai créé. A toi de faire des tests pour bien comprendre comment les portées fonctionnent. Encore une chose. Essaye au maximum de faire du pointage relatif et non pas absolu... C'est à dire utiliser this._parent.tab plutot que _level0.tab Car si tout d'un coup tu veux charger ton swf (A.swf) dans un autre swf (B.swf), le _level0 correspondra au swf de base (B.swf), plus à celui de la véritable animation (A.swf). Enfin, il y a encore un truc très intéressant qui est arrivé avec l'update de Flash MX 2004. La classe Delegate. ça te permet d'exécuter du code dans une portée autre que celle qui est à la base... Par exemple : Code :
Donc la sortie donnera : _level0 _level0.mc hello, , world undefined le dernier est indéfini, car _level0._parent n'existe pas. Le Delegate est vraiment très utile, et permet de rendre ton code bien plus clair et épuré que lorsque tu dois toujours faire des appels à this._parent pour atteindre des éléments. Bon courage et bons tests A++ |
||||||||||
|
|
00
|
|
|
#13 | ||
|
Invité de passage
![]() Inscription : juillet 2005 Messages : 14 ![]() |
merci pour l'explication
Donc j'ai bien mis mc comme variable par contre si je stock Occ[j][1] dans une variable t, avec la meme hiérarchie il me sort la dernière entrée: avant le rollover: dans le rollover de mc: Code :
|
||
|
|
00
|
|
|
#14 | ||||
|
Membre éclairé
![]() Inscription : juin 2005 Messages : 342 ![]() |
Tu vois, déjà tu as compris que t est écrasé à chaque fois et que c'est normal d'obtenir la dernière valeur
Pour ce que tu cherche à faire, je ferai comme suivant : Code :
Code :
A++ |
||||
|
|
00
|
|
|
#15 |
|
Invité de passage
![]() Inscription : juillet 2005 Messages : 14 ![]() |
et titre, rubrique et desc on peut les manipuler comme on veut? ce seont de sméthodes?
En tout cas, merci beaucoup! Je suis un peu un boulet en flash mais j'ai énormément appris grâce à toi!!! j'espère pouvoir en faire autant quand je maitriserai mieux le langage!! |
|
|
00
|
|
|
#16 | ||||||||
|
Membre éclairé
![]() Inscription : juin 2005 Messages : 342 ![]() |
ce ne sont pas des méthodes mais des variables membres.
En fait, à la base, l'ActionScript n'est pas fortement typé, comme par exemple le C++. Donc tu peux affecter à n'importe quel type d'objet à peu près n'importe quel type de données... par exemple, lorsque tu fais : tu affecte une fonction au movieClip. Ici, c'est une fonction existante (définie à undefined par défaut), donc tout roule. Mais tu pourrai tout à fait affecter une fonction personnalisée que tu appelera quand tu veux. par exemple : Code :
Code :
Pour te donner un exemple concrèt, tu pourrais faire semblant que tes propriétés "titre", "desc" et "rubrique" sont des membres privés, donc tu n'y accède pas directement, mais tu crée des fonctions membres pour y accéder : Code :
Code :
Voilà, en espérant que ça te mette sur la bonne voie A+ |
||||||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com