Comunidad de diseño web y desarrollo en internet online

Problema con boton

Citar            
MensajeEscrito el 18 May 2008 07:27 am
Tengo una duda con un boton, estoy experimentando con JSON y AS3, hasta ahora va todo genial. Mi problema es al crear un boton con AS3. El boton se crea, y el texto se coloca. Pero al hacer un MOUSE_OVER sobre el boton, este se ejecuta bien, y el problema es cuando el MOUSE_OVER pasa sobre el TextField!!, se rompe el listener, y vuelve a ejecutar MOUSE_OVER siendo que en ningun momento quite el mouse del boton. Se entiende?

Coloco mi codigo as3

Código :

import flash.net.URLRequest ;
import flash.display.MovieClip;
import flash.events.*;
import com.adobe.serialization.json.JSON;

var url:String = \\\"menu.txt\\\"; //Obtengo mis datos en formato JSON 
var reqURL:URLRequest = new URLRequest(url);
var loader:URLLoader = new URLLoader(reqURL);
loader.addEventListener(Event.COMPLETE, handleComplete);

function handleComplete( event:Event):void{
    var loader:URLLoader = URLLoader(event.target);
   var jsDecode:Object = JSON.decode( loader.data ) ; 
   iniciar(jsDecode);
}

function iniciar(js:Object) {
   crearMenu(js.menu); //js.menu son los items del Menu Nombre y URL
}

function crearMenu(menu:Object) {
   var menu_i:Number = menu.length;
   for(var i:int;i<menu_i;i++) {
// Tengo en la libreria un MovieClip exportado como miMenu.
      var mc:miMenu = new miMenu(); 
      addChild(mc);
      crearTexto(menu[i].nombre,mc); //Muestro el texto del menu
      mc.x= (mc.width + 1) * i;
           mc.y=10
   }
}

function crearTexto(texto:String,mc:MovieClip) {
       // Esto es solamente el formato del texto
   var label:TextField = new TextField();
   label.autoSize = TextFieldAutoSize.LEFT;
   label.htmlText = texto;
   label.selectable=false;
   var format:TextFormat = new TextFormat();
   format.font = \\\"Verdana\\\";
   format.color = \\\"0xefefef\\\";
   format.size = 11;
   label.setTextFormat(format);
   mc.addChild(label);
}


Mi problema esta aca, esta funcion va en el primer frame del movieclip de la libreria exportado como miMenu

Código :

var mMenu:Object = this;
mMenu.addEventListener(MouseEvent.MOUSE_OVER, mouseHandler);
mMenu.addEventListener(MouseEvent.MOUSE_OUT, mouseHandler);
//Esto es para que me aparezca la manito
mMenu.buttonMode = true; 
mMenu.useHandCursor = true;

function mouseHandler(e:MouseEvent):void {
    switch (e.type) {
        case MouseEvent.MOUSE_OVER :
         this.gotoAndPlay(\\\'over\\\');
        break;
        case MouseEvent.MOUSE_OUT :
         this.gotoAndPlay(\\\'out\\\');
   break;
        case MouseEvent.MOUSE_UP :
         this.gotoAndPlay(\\\'over\\\');
        break;
   }
}


El codigo funciona de maravilla, el problema que tengo como dije antes, es que cuando hago un MOUSE_OVER sobre el MovieClip (miMenu) el mismo se ejecuta pero cuando el mouse pasa sobre el TextField que esta en el centro de de miMenu el mouseOver se vuelve a ejecutar.

Si hago un debug con evt.target detecto que el target es miMenu y luego TextField, como hago para que el target por default sea solo miMenu es decir el movieclip entero y no todos sus childs.

Espero hallan comprendido mi problema., pueden ver el SWF en http://www.matius77.com.ar si pasan el mouse cerca de la palabra del menu ocurre el problema.

Por MaTiUs77

6 de clabLevel



Genero:Masculino  

Ushuaia

firefox
Citar            
MensajeEscrito el 18 May 2008 07:53 pm
holas :) bueno si creo que se como se soluciona. tienes que ponerle al boton

Código :

mybutton.mouseChildren=false


el proiblema es que cuando le pusiste el listener tambien actua sobre los childs dentro del boton lanzandote los eventos. por eso con eso le dices que los childs del botton no disparen nada.
solo el mismo boton. :wink:

en tu caso seria tambien que al texto le pongas al texto que no tenga eventos de mouse.

Código :

mitexto.mouseEnabled=false


en tu caso seria algo asi:

function crearTexto(texto:String,mc:MovieClip) {
// Esto es solamente el formato del texto
var label:TextField = new TextField();
label.autoSize = TextFieldAutoSize.LEFT;
label.htmlText = texto;
label.selectable=false;
var format:TextFormat = new TextFormat();
format.font = \\\"Verdana\\\";
format.color = \\\"0xefefef\\\";
format.size = 11;
label.setTextFormat(format);
mc.addChild(label);
//si este es el mc que tiene MOUSE_OVER
mc.mouseChildren=false
//o pruveva con esto tambien sino.
label..mouseEnabled=false
}


espero que te sirva. ^^

Por phoxer

Claber

827 de clabLevel

4 tutoriales

Genero:Masculino  

Ing en Sistemas

msie7
Citar            
MensajeEscrito el 18 May 2008 08:01 pm
lo que hago y me funciona, es poner un mc invisible en ultima capa del boton y ese boton es donde captura todos los eventos y asi no pones mas codigos. por ejemplo dibuja un cuadro vas a la ventana de colores y le pones en alpha = 0, despues lo conviertes a mc y ya.

Por DiegoAzul

376 de clabLevel



 

Mx

firefox
Citar            
MensajeEscrito el 19 May 2008 02:45 am
gracias phoxer sos un capo,!
funciona perfectamente al agregarle

Código :

mc.mouseChildren=false;


!! :cool: :lol:

DiegoAzul, probe con eso pero el listener seguia viendo el textfield, me saco canas! :twisted:, pero por suerte ya esta solucionado.

Una pregunta, que es mejor para ustedes, usar JSON o XML para cargar datos a un SWF ?

Por ahora uso JSON, pero nose si en algun momento me voy a topar con algo que solo se pueda hacer en XMl, y tendria intercambiar json por xml. Algun comentario?,

Gracias por todo! :cool:

Por MaTiUs77

6 de clabLevel



Genero:Masculino  

Ushuaia

firefox
Citar            
MensajeEscrito el 19 May 2008 05:39 am
:) me alegra que pudieras resolver tu problema.
respondiendo a lo otro., yo por lo menos no conosco JSON si se que XML es mas tradicional por asi decirlo. mas conosido. ya ves que evoluciona y un ejemplo e flex con MXML.
depende para el proyecto. si es poca la indo como por ejemplo amm una libreria de luenguaje o catalogos de productos te recomendaria XML ^^

Por phoxer

Claber

827 de clabLevel

4 tutoriales

Genero:Masculino  

Ing en Sistemas

msie7

 

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