Comunidad de diseño web y desarrollo en internet online

Duda con agregar eventos a MCs anidados (sin addChild)

Citar            
MensajeEscrito el 12 Jul 2007 03:55 pm
Estoy teniendo una duda que probablemente sea elemental y me esté ahogando en un vaso de agua pero me vale, así que pido ayuda. :lol: .Voy empezando todavía con AS3, ténganme un poco de paciencia,jejeje.
Estoy haciendo una especie de mapa en el que hay varios edificios y simbolizarán una opción cada uno. Éstos los tengo ya dentro de una instancia de movieclip que llamé Mapa (agregado ya a la escena, no usando addChild;como lo he hecho hasta ahorita y he visto que la mayoría de los ejemplos que he visto agregan los elementos al stage en modo de ejecución, no en "modo de diseño").


La Document Class va así:


Código :

package{
   
  import flash.display.MovieClip;   
  import flash.events.*;
  
  public class MainMapa extends MovieClip{
     
     public function MainMapa():void{
        mapa.Edificio1.addEventListener(MouseEvent.CLICK,sobreEdificio);
     }
     
     private function sobreEdificio(event:MouseEvent):void{
        trace("Encima del edificio");
     }
  }
}


Pero no me responde en el evento sobreEdificio :( .

Luego pruebo con este código para cerciorarme que está encontrando el movie clip llamado Edificio1 :


Código :

package{
   
  import flash.display.MovieClip;   
  import flash.events.*;
  
  public class MainMapa extends MovieClip{
     
     public function MainMapa():void{
        mapa.addEventListener(MouseEvent.CLICK,sobreEdificio);
     }
     
     private function sobreEdificio(event:MouseEvent):void{
        mapa.Edificio1.alpha=.4;  // nomás probando con el alpha
     }
  }
}


Y sí se logra cambiar el alpha :O .

¿Alguien me puede orientar?, sé que es algo muy sencillo pero no sé si por mi terquedad me he cerrado. :lol: :lol: ^^ Gracias.

Por Rafeo

650 de clabLevel

3 tutoriales
1 articulo

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 16 Jul 2007 01:26 pm
bueno te doy un tip usa para que se comporte como un boton sin tener en cuenta los mc internos que tenga:

Código :

button.mouseChildren = false;


De resto al codigo no le veo problema.

Saludos

Por bipsa

628 de clabLevel

1 tutorial
1 articulo

Genero:Masculino  

Colombia

safari
Citar            
MensajeEscrito el 16 Jul 2007 04:52 pm
Gracias bipsa pero no me funciona, en mi caso el MovieClip padre sería mapa:

Código :

mapa.mouseChildren = false;


Ví también un ejemplo del uso de esta propiedad (por Senocular ).

(lo modifiqué a tipo MovieClip, pero también funciona igual,tiene la propiedad también).

Código :

// main button
var spriteButton:MovieClip = new MovieClip();
spriteButton.name = "spriteButton";
spriteButton.mouseChildren = true;

// graphics
var spriteGraphics:MovieClip = new MovieClip();
spriteGraphics.name = "spriteGraphics";
spriteGraphics.graphics.beginFill(0x4080A0);
spriteGraphics.graphics.drawCircle(50, 50, 25);

// add to display list
spriteButton.addChild(spriteGraphics);
addChild(spriteButton);

// events
spriteButton.addEventListener(MouseEvent.CLICK, click);
function click(evt:MouseEvent):void {
    trace(evt.target.name+ " dice :Me aplastaste");
}


Sí funciona de maravilla, pero igual agrega el MovieClip con el método addChild().
Tendré que apuntar la posición x y y de cada boton para después agregarlos con addChild :cry: .
O me equivoco? :o

Por Rafeo

650 de clabLevel

3 tutoriales
1 articulo

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 17 Jul 2007 06:31 pm
Desde cero empecé en otro archivo y esto le puse para probar:

a1= instancia de la clase a que sería un rectángulo rojo.
b1= instancia de la clase b que estaría dentro de la instancia a1 (círculo verde).
c1= instancia de la clase c (triángulo azul) y está dentro de la instancia b1.



Este código que puse ahora en un frame me funciona muy bien, que sería el nivel en el que está el Edificio1 en el mapa (mapa.Edificio1 ; el cual también es un MovieClip dentro de otro).

Código :

a1.b1.addEventListener(MouseEvent.CLICK,sobreEdificio);
function sobreEdificio(event:MouseEvent):void{
          trace("Encima del edificio");
} 


Y me atreví a intentar agregar el evento al triángulo así:

Código :

a1.b1.c1.addEventListener(MouseEvent.CLICK,sobreEdificio);
function sobreEdificio(event:MouseEvent):void{
          trace("Encima del edificio");
}


Pero este si se pone rebelde y me devuelve en la ventana Output esto:

Código :

TypeError: Error #1010: A term is undefined and has no properties.
   at pruebanivelesMCs_fla::MainTimeline/pruebanivelesMCs_fla::frame1() 


Help please ! :oops:

Por Rafeo

650 de clabLevel

3 tutoriales
1 articulo

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 18 Jul 2007 12:25 am

Por Rafeo

650 de clabLevel

3 tutoriales
1 articulo

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 18 Jul 2007 12:40 am
La instancia c1 estaba dentro de a1 por eso no me funcionaba este ejemplo (ouh!) XD. Aún así en el ejemplo original me sigue ignorando la función sobreEdificio del evento MouseEvent.CLICK. :( .
Gracias.

Por Rafeo

650 de clabLevel

3 tutoriales
1 articulo

Genero:Masculino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.