Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Andre Cocuroci

Problema Eventos

Recommended Posts

Amigos, achava simples trabalhar com eventos, mas estou com uma dificuldade boba que não consigo arrumar.

 

Tenho duas classes, a Main que é a document class e a Mc que seria de um movieclip. Na Main eu adiciono um ouvinte para um evento que vai vir do Mc e no Mc eu disparo ele quando o instancio, mas o evento não está se propagando, fica somente dentro do mc, o que estou fazendo de errado?

 

Segue os códigos:

 

Main:

package  {
	
	import flash.display.MovieClip;	
	import flash.events.Event;
	import Mc;
	
	public class Main extends MovieClip {		
			
		public function Main() {	
			addEventListener("vejaIsso", teste);
			var m = new Mc();
		}
		
		public function teste(e:Event) {
			trace("Evento fora do Mc");
		}
	}
	
}

Mc:

package  {
	
	import flash.display.MovieClip;	
	import flash.events.Event;
		
	public class Mc extends MovieClip {
		
		public function Mc() {
			config();			
		}
		
		public function config():void {
			addEventListener("vejaIsso", veja);
			dispatchEvent(new Event("vejaIsso", true, true));		
		}
		
		public function veja(e:Event) {
			trace("Evento dentro do Mc");
		}
	}
	
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso por que Main não tem nenum processo disparando este evento.

 

Isso resolveria:

 

package  {
        
        import flash.display.MovieClip; 
        import flash.events.Event;
        import Mc;
        
        public class Main extends MovieClip {       	
                        
                public function Main() {        
                        addEventListener("vejaIsso", teste);
                        var m = new Mc();
			m.addEventListener("vejaIsso", vejaIsso);
						
                }
                protected function vejaIsso(e:Event)
           	{
			dispatchEvent(new Event("vejaIsso", true, true));
		}
                public function teste(e:Event) {
                        trace("Evento fora do Mc");
                }
        }
        
}

Você coloca para monitorar m, e quando ocorrer o evento em m, você dispara o evento em Mian.

Compartilhar este post


Link para o post
Compartilhar em outros sites

hmm, mas assim, se no Mc estou despachando o evento e a propriedade bubbles está como true, esse evento não teria que chegar até o Main?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, mas só no caso de você estender a classe, o que não foi o caso, você apenas chamou o objeto dentro de outra classe.

 

Afinal de contas, o evento está sendo disparado em m e não em Main, eles não tem um vinculo direto.

 

Mas claro, posso estar enganado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hmm pois é, acho que eu não estou entendendo a definição de eventos.

 

Mas vamos pensar nesse cenário sem usar classes, tudo nos frames.

 

Tenho 3 camadas no meu flash, a timeline inicial, um movie clipe A que está na timeline e um movie clipe B que está dentro de A.

 

Se eu disparar o evento dentro de B e colocar bubbles como true eu consigo capturar na timeline.

 

Então A extend timeline e B extend A?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe, eu não me expressei direito, veja o exemplo:

 

import flash.display.Sprite;
import flash.events.Event;

var A:Sprite = new Sprite();
A.graphics.beginFill(0x000,0.3);
A.graphics.drawRect(0,0,100,100);
A.graphics.endFill();
this.addChild(A);
A.x = 100;
A.y = 100;
A.addEventListener("EventoTeste",function($e:Event):void{
	trace("Evento disparado em A");
});

var B:Sprite = new Sprite();
B.graphics.beginFill(0x000,0.3);
B.graphics.drawRect(0,0,80,80);
B.graphics.endFill();
A.addChild(B);
B.x = 10;
B.y = 10;
B.addEventListener("EventoTeste",function($e:Event):void{
	trace("Evento disparado em B");
});

var C:Sprite = new Sprite();
C.graphics.beginFill(0x000,0.3);
C.graphics.drawRect(0,0,60,60);
C.graphics.endFill();
B.addChild(C);
C.x = 10;
C.y = 10;
C.addEventListener("EventoTeste",function($e:Event):void{
	trace("Evento disparado em C");
});
C.dispatchEvent(new Event("EventoTeste",true,true));

 

Funciona certo?

Agora tire o addChild do A com o B e veja se funciona.

Veja que o fato de ambos estejam no stage não significa nada, mas se você os vincular por um addChild a história muda.

 

Veja o seu exemplo funcionando:

 

package 
{

	import flash.display.MovieClip;
	import flash.events.Event;
	import Mc;

	public class Main extends MovieClip
	{

		public function Main()
		{
			addEventListener("vejaIsso", teste);
			var m = new Mc();
			addChild(m);
			m.config();
		}

		public function teste(e:Event)
		{
			trace("Evento fora do Mc");
		}
	}

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.