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 31/01/2012, 19h24   #1
Invité de passage
 
Inscription : juin 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 19
Points : 2
Points : 2
Par défaut Certains clips non-cliquables après instanciation

Bonjour,
Je suis complètement bloqué...
Je stocke dans un tableau des objets qui représentent des petits personnages. Après avoir parcouru mon tableau et instancier les clips nécessaires, j'aimerais que lorsque je clique dessus, une action s' exécute (Un trace pour le moment).

L'instanciation fonctionne bien, le problème est que certains de ces clips ne sont pas cliquables, d'autres oui, mais pourquoi ? Je ne sais pas !

Mon code qui instancie :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
private function InstancierFantomes() : void
		{
			var nbre:uint = m_tableauFantomes.length;
 
			for(var i:uint = 0; i < nbre; i++)
			{
				//var monstre:MovieClip = new MovieClip();
				var monstre:MovieClip = this.m_tableauFantomes[i].clipFantome();
				do
				{
					monstre.x = Math.random()*1000-(monstre.width);
				}while(monstre.x < 120 || monstre.x > 700);
 
				do
				{
					monstre.y = Math.random()*750-(monstre.height);
				}while(monstre.y < 250 || monstre.y > 440);
 
				do
				{
					var j:Number = Math.random()*1;
				}while(j<0.6 || j>0.7);
 
 
				monstre.scaleX = j;
				monstre.scaleY = j;
 
				addChild(monstre);
				monstre.addEventListener(MouseEvent.CLICK, clickFantome);
 
				monstre.id_txt.text = i;
 
 
			}
 
		}
La fonction appelée au click :
Code :
1
2
3
4
5
6
7
 
private function clickFantome(pEvt : MouseEvent) : void
		{
			var cible:String = pEvt.currentTarget.id_txt.text;
 
			trace(cible);
		}
Si vous avez une piste, je suis preneur !

Merci à vous !

Jérôme
distar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 20h31   #2
Futur Membre du Club
 
Inscription : avril 2010
Messages : 82
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 82
Points : 19
Points : 19
Bonjour,

tu dit que certain sont cliquables, d'autres non.
Sa me fait penser à l'empilement des MovieClip.

En AS3, si tu superpose 2 MC avec l'Event MouseEvent.Click, celui le plus au dessus recevra uniquement l'event.

Attention je ne parle pas de superposition visuel mais réel, à prendre en compte si t'es formes sont compliqué.

Si c'est bien sa le problème, il n'y a malheureusement pas de solution, à par améliorer ta programmation et ne pas utiliser cet Event , mais plutôt se diriger ver un algo qui utilise "hitTestPoint" si tu n'est pas très fort en programmation.
carton99 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 20h42   #3
Invité de passage
 
Inscription : juin 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 19
Points : 2
Points : 2
Merci !
Beh je vais regarder avec ces hitTestPoint alors...

++
distar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 21h04   #4
Invité de passage
 
Inscription : juin 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 19
Points : 2
Points : 2
Désolé mais je ne comprends pas à quoi sert ce hitTestPoint et comment m'en servir pour le click de Movie-clips...
distar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 21h31   #5
Futur Membre du Club
 
Inscription : avril 2010
Messages : 82
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 82
Points : 19
Points : 19
Code :
1
2
3
4
5
6
7
8
private function InstancierFantomes() : void
{
    for(var i = 0;i<m_tableauFantomes.length;i++){
       addChild(m_tableauFantomes[i]);
     }	
 
  this.addEventListener(MouseEvent.CLICK, clickFantome);
}
Code :
1
2
3
4
5
6
7
8
9
 
private function clickFantome(evt : MouseEvent) : void
{
for(var i = 0;i<m_tableauFantomes.length;i++){
    if(m_tableauFantomes[i].hitTestPoint(this.mouseX,.this.mouseY,true) )
         trace( m_tableauFantomes[i].id_txt.text );
}
 
}
Il y a surement des petites erreurs, mais c'est dans l'idée.
carton99 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 23h24   #6
Invité de passage
 
Inscription : juin 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 19
Points : 2
Points : 2
Ah ok ! En fait ça teste ce qu'il y a sous la souris...

Je vais essayer avec cette solution alors !

Et merci pour toute ton aide, c'est très sympa !

++
distar 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 11h29.


 
 
 
 
Partenaires

Hébergement Web