Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flash > AS1/AS2
AS1/AS2 Questions relatives à la programmation ActionScript 1 et 2 (Cours AS2)
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 27/08/2006, 23h04   #1
Futur Membre du Club
 
Inscription : septembre 2004
Messages : 29
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 29
Points : 17
Points : 17
Par défaut répérage de la souris dans une arbo de Movie-Clip

Au sujet des fonctions action-script 'OnMouse'.
J'ai rencontré un problême de hiérarchie.

Voici un exemple :
Je place un MovieClip que je nomme "parent", j'y insère une sous-MovieClip que je nomme "enfant".
Dans "parent" je place onRollOut = fonction{<instructions;>}
Dans "enfant" je place onRollOver = fonction{<instructions;>}

Résumé :
. . . . MovieClip "parent" => parent.onRollOut=function( ){<affiche dans un premier texte le mot "parent>}
. . . . . . . |---- MovieClip "enfant => enfant.onRollOver=function(){<afficher dans un second texte le mot "enfant">}


Résultat : lors du survole 'enfant, le texte 'enfant' ne s'affiche pas (dans le texte réservé à enfant).
Le MovieClip 'Parent' semble cacher "enfant" à la souris.

Je croyais qu'il n'y avait pas de solution à cela

Merci d'avance.

Destrumel
Destrumel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2006, 00h00   #2
Membre confirmé
 
Avatar de aorgerit
 
Inscription : juillet 2006
Messages : 253
Détails du profil
Informations personnelles :
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : juillet 2006
Messages : 253
Points : 274
Points : 274
Bonjour,

Tu fais le mélange entre la souris, qui est un objet, et le bouton, qui est un autre objet.
Et cela est applicable dès F5, puisque nous reprenons^partiellement le fil d'une autre discussion.

Dans ton cas du disposes d'un objet nommé "parent".

tu lui applique le code parent.onRollOut=...

pour son enfant, tu lui dis un autre code, no problemo toujours.
enfant.onRollOver...

Là tu constate, je te cite :
Le MovieClip 'Parent' semble cacher "enfant" à la souris

hé oui, c'est confirmé, à compter du moment où ton clip "parent" prend la priorité de profondeur sur son objet "enfant".

Plus précisément "parent" contient "enfant", de fait en pure théorie, parent contient enfant donc la priorité du code se fait sur "parent" et non "enfant" puisque le parent.onparent.onRollOut signifie que l'enfant EST présent.

Encore une histoire de famille ça.

Pour ma part j'aurais inversé, ce qui me semble plus logique dans le cadre d'un menu , je pense :
parent.onRollOver
et :
enfant.onRollOut.

Bien à toi.
aorgerit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2006, 00h10   #3
Membre confirmé
 
Avatar de aorgerit
 
Inscription : juillet 2006
Messages : 253
Détails du profil
Informations personnelles :
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : juillet 2006
Messages : 253
Points : 274
Points : 274
complément.

j'ai oublié un truc peut être ,

Considère au niveau compréhension flash un bouton comme un équivalent d'un movieClip auquel on associe un enterFrame ( dur d'usine ) avec la position de la souris.
En conséquence il faut utiliser un movieClip.hitTest(...).
Si c'est "true" tu es dessus , si c'est "false" tu n'es pas dessus.
On fait la même chose en flash6 avec un MovieClip et Mouse.Show et Mouse.Hide, une fois les conditions "true/false" résolues.

Bien à toi.
aorgerit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2006, 00h17   #4
Futur Membre du Club
 
Inscription : septembre 2004
Messages : 29
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 29
Points : 17
Points : 17
Bonsoir,

Citation:
Envoyé par aorgerit
Plus précisément "parent" contient "enfant", de fait en pure théorie, parent contient enfant donc la priorité du code se fait sur "parent" et non "enfant" puisque le parent.onparent.onRollOut signifie que l'enfant EST présent.
Cela signie que ce n'est pas possible. Il n'y a vraiment aucun moyen ?

Citation:
Envoyé par aorgerit
priorité du code
Je ne connais pas ce concept. Qu'est-ce que c'est et à quoi ça sert.

Merci pour tes explications.

Destrumel

PS : OK, j'ai lu le HitTest(), malheureusement, il faudrait aussi que je sache si, à la position de la souris, mon MovieClip est caché un autre objet.
Destrumel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2006, 10h35   #5
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,

La priorité du code, c'est la hiérarchie dans laquelle est exécuté le code : du clips le plus haut (le _root) au plus bas. Le problème étant que dans Flash 8, la gestion événementielle (srutout pour la souris) est mal fait et de ce fait si ton clip parent à une action onXXX (relative à la souris), les enfants ne reçevront pas l'événement
Notez que ceci a été complètement chamboulé en AS3 et que maintenant grâce au BubbleEvent, tout cela est parfaitement géré

@++
thecaptain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2006, 18h27   #6
Futur Membre du Club
 
Inscription : septembre 2004
Messages : 29
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 29
Points : 17
Points : 17
Citation:
Envoyé par thecaptain
La priorité du code, c'est la hiérarchie dans laquelle est exécuté le code : du clips le plus haut (le _root) au plus bas.
Le code décrète que la souris pointe un movieclip avant d'avoir vérifié si elle survolait un des composants du movieClip ?
Je ne comprends pas bien.

Citation:
Envoyé par thecaptain
Le problème étant que dans Flash 8, la gestion événementielle (srutout pour la souris) est mal fait et de ce fait si ton clip parent à une action onXXX (relative à la souris), les enfants ne reçevront pas l'événement
OK, pour AS2, c'est une confirmation

Citation:
Envoyé par thecaptain
Notez que ceci a été complètement chamboulé en AS3 et que maintenant grâce au BubbleEvent, tout cela est parfaitement géré
Deux questions :
1 - Est-ce que l'AS3 fonctionne sur Linux,
2 - où puis-je trouver des infos sur le 'BubbleEvent' et le repérage souris( aucune aide trouvée sur Google)

Merci de votre aide.

Phildes
Destrumel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2006, 21h02   #7
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,

Citation:
Deux questions :
1 - Est-ce que l'AS3 fonctionne sur Linux,
2 - où puis-je trouver des infos sur le 'BubbleEvent' et le repérage souris( aucune aide trouvée sur Google)
- ta 1ère question ne veut rien dire : AS3, c'est le langage, à la publication cela reste un .swf Et Adobe a mis au point un Flash Player 9 pour linux il me semble, donc aucun souci de ce coté-la !
- le BubbleEvent, tu trouveras des informations sur le le blog de petepx, celui d'ekameleon et encore à plein d'endroit Mais pour comprendre le fonctionnement, mieux vaut faire un essaie. Et pour l'avoir fait, je peux te dire que ca marche du tonnerre

Citation:
Le code décrète que la souris pointe un movieclip avant d'avoir vérifié si elle survolait un des composants du movieClip ?
Je ne comprends pas bien.
Ce qui se passe, c'est que Flash sait ou on a clické sur la scène, il envoie donc l'événement au _root. S'il n'y a pas d'action onXXX, alors il l'envoie au clip contenu dans le _root, le plus devant (donc avec la pronfondeur la plus grande). Si celui-ci n'a pas de onXXX alors, il fait pareil jusqu'a ce qu'il trouve le bon event et s'arrete ! Ce qui pose évidemment d'énormes problème pour les menus et autre (enfin y a des solutions ).

@++
thecaptain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2006, 01h58   #8
Futur Membre du Club
 
Inscription : septembre 2004
Messages : 29
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 29
Points : 17
Points : 17
Citation:
Envoyé par thecaptain
Salut,
- ta 1ère question ne veut rien dire :
Désolé de dire des sottises
je croyais sottement que la version 8 n'était pas compatible Linux, mais la 8.5 le serait... (La 8.5 ??? )
Sinon, j'avais sottement lu ceci
http://www.media-box.net/index.php/2...r-9-pour-linux

Citation:
Envoyé par thecaptain
- le BubbleEvent, tu trouveras des informations sur le le blog de petepx
Il ne veut pas m''ouvrir la porte

Citation:
Envoyé par thecaptain
, celui d'ekameleon
J'ai fait une recherche "BubbleEvent"

Citation:
Envoyé par thecaptain
et encore à plein d'endroit Mais pour comprendre le fonctionnement, mieux vaut faire un essaie.
C'est effectivement ce que j'aurais aimé faire, dès que je trouve une doc accessible sur Internet.

Merci de votre aide je vais essayer de touver ça.

Destrumel
Destrumel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2006, 20h27   #9
Futur Membre du Club
 
Inscription : septembre 2004
Messages : 29
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 29
Points : 17
Points : 17
Citation:
Envoyé par thecaptain
Salut,

La priorité du code, c'est la hiérarchie dans laquelle est exécuté le code : du clips le plus haut (le _root) au plus bas. Le problème étant que dans Flash 8, la gestion événementielle (srutout pour la souris) est mal fait et de ce fait si ton clip parent à une action onXXX (relative à la souris), les enfants ne reçevront pas l'événement
Notez que ceci a été complètement chamboulé en AS3 et que maintenant grâce au BubbleEvent, tout cela est parfaitement géré

@++
OK vu :
http://livedocs.macromedia.com/flex/...27.html#118998

Je me plonge là-dedans. je pense que Falsh est en train de remonter très très vite sont retard

Merci beaucoup pour votre aide.

Phildes
Destrumel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2006, 23h04   #10
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,

Citation:
Envoyé par Destrumel
je pense que Falsh est en train de remonter très très vite sont retard
oui c'est ce que donne l'impression de ce nouveau langage maintenant faudra voir ce que Flash 9 nous réserve ! C'est en bonne voie en tout cas

@++
thecaptain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2006, 02h07   #11
Futur Membre du Club
 
Inscription : septembre 2004
Messages : 29
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 29
Points : 17
Points : 17
Bonsoir,

D'après ce que j'ai compris le balayage du Bubbling ne s'arrète pas quand il a trouvé le 1er élément pointé par la souris.

J'ai vu qu'il fallait que la pièce pointée indique d'arrêter le balayage.

Il n'y a pas de moyen automatique pour arrêter le balayge au 1er composant trouvé ? (Ensuite on remonte le Bubbling et c'est terminé)

Phildes
Destrumel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2006, 10h49   #12
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,

regarde du coté de la méthode cancel de l'événement... maintenant si l'événement n'est pas "cancelisable", alors ce n'est pas possible. Mais pourquoi cela te gène-t-il ?

@++
thecaptain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2006, 13h43   #13
Futur Membre du Club
 
Inscription : septembre 2004
Messages : 29
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 29
Points : 17
Points : 17
Bonjour,

Citation:
Envoyé par thecaptain
regarde du coté de la méthode cancel de l'événement...
Merci beauoup pour ton aide. j'ai effectivement besoin de tout vérifier.
Même si cette piste semble mener à une impasse, il était important de la suivre :
"Cancelling the default behavior has no effect on the progress of an event object through the event flow"

Citation:
alors ce n'est pas possible. Mais pourquoi cela te gène-t-il ?

@++
Dans la suite de la discusion du "l'avenir de Flash", je recherche le moyen d'automatiser le système.
Il faut vérifier les pièces qui passent au dessus des autres, et les cachent ainsi à la souris,
'
----------------------
Exemple : l'anim comporte un menu et d'autres pièces. Une de ses pièces survole mon menu.

Pour le Wysiwyg, la souris pointera sur la pièce-qui-survole' et non sur le menu (puisqu'il est 'caché' par une autre pièce)
A priori, dans une animation, toutes les pièces peuvent survoler.

En conséquence, il faudrait mettre 'Event.stopPropogation()' dans toutes les pièces.
-----------------------

Si le comportement (arrêt-automatique-à-la-1ère-occurence-rencontrée) n'est pas encore intégré à Flash, ce n'est pas très grave.
Cela ne demande que peu de modification - un flag qui fait remonter le bubbling + arrêter le balayage.

Et enfin, pour être nickel, proposer à l'utilisateur de choisir le comportement par défaut qu'il souhaite : "Wysiwyg" ou ""pièces-transparente-à-souris"

----------------------

Avec le bubbling, Falsh a fait le plus gros du travail. C'est dommage de s'arrêter si près du but
Si ça l'option "arrêt-automatique-à-la-première-occurence-valide" n'est pas encore implémenté dans Flash, on peut peut-être essayer de leur transmettre l'idée.
Pour un tout petit investissemnt, Ca évite de traîner une casserole (A ce niveau, si un géant de l'informatique se réveille et cherche à placer un éditeur concurrent, chaque détail peut compter)

------------------------

Existe-t-il un moyen officiel pour transmettre cette suggestion (une sorte de boîte-à-idées) chez Adobe ?

Rappel des idées :
1 - Option pour les évenement suivant le bubbling : arrêt-automatique-à-la-première-occurence-valide (objectif : se conformer au Wysiwyg)
2 - Option par défaut pour toute l'anim, proposée à l'utilisateur : "respect du Wyswiwyg" ou "pièces transparentes à la souris" (objectif : laisser le choix à l'utilisateur, plutôt que la contrainte)

Merci de ton aide. J'ai enfin pu réellement avancer dans ce problème de reconnaissance souris dans Flash.

Destrumel
Destrumel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2006, 17h35   #14
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,

mmmh je ne peux pas vraiment t'aiguiller comme ça, je n'ai pas encore assez fouiné la-dedans. Mais par contre tu peux trouver une solution de rechange : tu crée un Event qui a une propriét isCanceled() et si oui, alors dans tes écouteurs, tu ne fait rien non ?

Sinon pour les suggestions, je pense qu'il faut aller sur les forums adobe

@++
thecaptain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2006, 21h38   #15
Membre confirmé
 
Avatar de aorgerit
 
Inscription : juillet 2006
Messages : 253
Détails du profil
Informations personnelles :
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : juillet 2006
Messages : 253
Points : 274
Points : 274
Bonjour,

[QUOTE=thecaptain]
la gestion événementielle (srutout pour la souris) est mal fait et de ce fait si ton clip parent à une action onXXX (relative à la souris), les enfants ne reçevront pas l'événement
QUOTE]


La gestion, évènementielle ou séquentielle, fonctionne parfaitement autant pour la souris que pour le reste.
Ce n'est q'une question d'organisation, et là seuls le papier et le crayon peuvent aider.


Bien à toi
aorgerit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2006, 21h46   #16
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
Citation:
Envoyé par aorgerit
Bonjour,
Salut,

Citation:
Envoyé par thecaptain
la gestion événementielle (srutout pour la souris) est mal fait et de ce fait si ton clip parent à une action onXXX (relative à la souris), les enfants ne reçevront pas l'événement

La gestion, évènementielle ou séquentielle, fonctionne parfaitement autant pour la souris que pour le reste.
Ce n'est q'une question d'organisation, et là seuls le papier et le crayon peuvent aider.


Bien à toi
Je suis pas tout à fait d'accord avec toi Ayant un préférence pour Java (tout en adorant aussi le C++), je trouve que dans flash, la gestion des événements style 'click de souris' n'est pas très bien conçue du au fait justement que tu doive utiliser un certain type d'arborescance de tes clips (je dis pas que cela ne marche pas, mais que c'est contraignant). Si je me place par rapport à l'AS3, cela nous permettra d'avoir une structure de MovieClip beaucoup plus propre lorsque l'on fera des menus car justement nous ne somme pas limité à cause de la hiérarchie événementielle, c'est pour cela que je dit 'male faite'. Maintenant il ne faut pas prendre cela au pied de la lettre non plus On trouve toujours des solutions de contournement ^^

Quant au papier-crayon, je suis entièrement d'accord, pour faire quelque chose de professionnel, c'est indispensable !

@++
thecaptain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2006, 23h09   #17
Futur Membre du Club
 
Inscription : septembre 2004
Messages : 29
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 29
Points : 17
Points : 17
Bonsoir,

Pour moi, ce sujet est [résolu]

Merci très sincèrement à chacun de vous, tout spécialement à aorgerit et Thecaptain, tu temps que vous avez accordé à me répondre et à m'aider.

Je repars avec une foule d'information. Tout ce que j'attendais depuis 5 ans.

Je vais suivre ton conseil TheCaptain.

Avec tous mes voeux pour un bel avenir pour Flash

Destrumel
Destrumel est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h59.


 
 
 
 
Partenaires

Hébergement Web