Comunidad de diseño web y desarrollo en internet online

devolver objeto con un mouse event

Citar            
MensajeEscrito el 18 Feb 2010 06:09 pm
Hola estoy intentando hacer en flex 3 que se seleccione un icono de unos cuantos que doy para elegir o sea (muchas imagenes), mi pregunta es como hago para cuando con el evento del mouse, saber que imagen presione, y obtener ese objeto, para pedir el source (direccion) de la imagen asi se la asigno a otra imagen y me queda igual que el icono que seleccione.?? :shock: Yo lo tengo implementado con un switch pero quisiera hacer que me devuelva el objeto entero (imagen) asi obtengo el source haciendo objetoDevuelto.source ???

Por diego_G_09

31 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Feb 2010 06:16 pm
event.target o si tiene muchos contenedores la imagen y quieres la instancia de quien tiene el listener usas.. event.currentTarget


Saludos

Por miguelmoraleda

Claber

430 de clabLevel

5 tutoriales

 

chrome
Citar            
MensajeEscrito el 18 Feb 2010 06:51 pm
hola miguel ya lo he probado con el event.target, pero event.target no es el objeto en si porque yo pongo por eje, event.target.source, y no me devuelve nada, y supuestamente tendria que devolver el source de la imagen que di el click el event.target.toString(), me devuelve cosas del estilo: main0.canvasIconos.Panel54.iconoB.FlexLoader.... o sea toda la dir donde esta el objeto (la imagen pero no el objeto) y no el id (nombre de la imagen)., estoy usando flex builder 3 con action script 3. sabes que me puede estar pasando?? o utilizo mal el target.??

Por diego_G_09

31 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Feb 2010 07:09 pm
el tema esta aca.. main0.canvasIconos.Panel54.iconoB.FlexLoader.... termina en FlexLoader ?? si es asi prueba con event.target.content a ver que te devuelve... puedes usar trace directamente para saber que tipo de objetos son.. por ejemplo:

trace(event.target.content);
trace(event.target.content.source);

(El target lo usaste bien, solo que yo nunca pense que el listener de click lo tendria el loader.)

Saludos

Por miguelmoraleda

Claber

430 de clabLevel

5 tutoriales

 

chrome
Citar            
MensajeEscrito el 18 Feb 2010 07:19 pm
no tengo la opcion content, cuando pongo event.target tengo solo 8 opciones, toString(), valueOf(), isprototypeOf(), etc, pero content no me sale ni ahi, ja, Te repito que estoy con flex builder y se diferencia un poco con Flash, por eso es que no me debe aparecer el content con el target, algo similar?? para usar en flex??
gracias

Por diego_G_09

31 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Feb 2010 07:34 pm
las ayudas no siempre tienen la verdad... lo probaste aunque sea ??? el objeto que devuelve la propiedad target es Object... es por eso que la ayuda solo te muestra algunas opciones. Saludos.

Por miguelmoraleda

Claber

430 de clabLevel

5 tutoriales

 

chrome
Citar            
MensajeEscrito el 18 Feb 2010 07:53 pm
Si lo probe por las duda antes y no me da error pero no me devuelve nada eje
textoPantalla.text = event.target.content.source;
aca en la pantalla en el texto me tendria que aparecer el souce de la imagen que di el clik, pero no aparece nada.
y cuando hago

eligioEsteIcono.source = event.target.content.source;
no me asigna el source a la imagen.
Se entiende mi problema?? tengo muchas imagenes y quiero el objeto (la imagen) para solo con una funcion ejemplo .sourse puedo asignarle a otra imagen la misma imagen, esto es para no tener que hacer un switch con un case para cada imagen, como el que tengo echo...


public function esteIcono(event: MouseEvent):void
{
var miIcono:String;
//iconoElegido = event.target.toString();
miIcono = event.target.toString().substr(27,6); --- esto me devuelve el id pero es un invento no tendira que hacer esto, para conseguir la id.
//usuAtaque.text = event.target.content.source;
//usuAtaque.text = event.currentTarget;
switch(miIcono)
{
case "iconoA": imgAtaque.source = iconoA.source;
break;
case "iconoB": imgAtaque.source = iconoB.source;
break;
case "iconoC": imgAtaque.source = iconoC.source;
break;
case "iconoD": imgAtaque.source = iconoD.source;
break;
case "iconoE": imgAtaque.source = iconoE.source;
break;
case "iconoF": imgAtaque.source = iconoF.source;
break;
case "iconoG": imgAtaque.source = iconoG.source;
break;
case "iconoH": imgAtaque.source = iconoH.source;
break;
case "iconoI": imgAtaque.source = iconoI.source;
break;
case "iconoJ": imgAtaque.source = iconoJ.source;
break;
case "iconoK": imgAtaque.source = iconoK.source;
break;
case "iconoL": imgAtaque.source = iconoL.source;
break;
case "iconoM": imgAtaque.source = iconoM.source;
break;
case "iconoN": imgAtaque.source = iconoN.source;
break;
case "iconoO": imgAtaque.source = iconoO.source;
break;
case "iconoP": imgAtaque.source = iconoP.source;
break;
}
}

imgAtaque.visible = true;
}

Por diego_G_09

31 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Feb 2010 08:00 pm
Si, entiendo perfecto tu problema. me gustaria ayudarte a solucionarlo. Muestrame como es que estar cargando las imagenes y donde es que poner el listener del click.. y para probar. usa trace(event.target); asi vemos que tipo de objeto tiene adentro... prueba todos estos.

trace(event.target);
trace(event.target.content);
trace(event.target.contentLoaderInfo);
trace(event.target.contentLoaderInfo.content);

en algun lado tiene que estar tu clase que tiene... source...

Saludos

Por miguelmoraleda

Claber

430 de clabLevel

5 tutoriales

 

chrome
Citar            
MensajeEscrito el 18 Feb 2010 08:29 pm
probe con todo pero no pude hacer que me devolviera el source eje miTexto.text = event.target.content.source; y no me devuelve string ni ahi, no me devuelve nada, el event.target.content.toString() me dice que es un [object Bitmap] no se si sirve de ayuda, me dice que es una imagen eso creo. ahora no entiendo porque no anda con el source. Veo que vos utilizas flash por que por eje el trace no esta implementado en flex builder, y muchas cositas son distintas, y esta es distinta, ahora cual sera la palabra clave para devolver el objeto? ese es el problema !! no se te ocurre nada mas??

Por diego_G_09

31 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Feb 2010 08:44 pm
Ahi esta el problema... te devuelve un Bitmap... donde se supone que cargarte el surce?? tienes una clase para esos objetos ?? viene de un xml ??? que onda ? por eso te decia que pusieras el codigo de como lo estas creando.

Por miguelmoraleda

Claber

430 de clabLevel

5 tutoriales

 

chrome
Citar            
MensajeEscrito el 18 Feb 2010 08:52 pm
bueno las imagenes son de un archivo mxml, que simplemente con el design que trae flex arrastro una imagen al un panel, la imagen es del tipo mx:image, te muestro en codigo mxml la parte de los iconos que muestro,

<mx:Canvas x="560" y="220" width="200" height="254" id="canvasIconos">
<mx:Panel x="0" y="0" width="200" height="254" layout="absolute">
<mx:Image x="10" y="10" source="../imagenes/AOL Instant Messenger.png" width="32" height="32" id="iconoA"/>
<mx:Image x="90" y="87" source="../imagenes/AOL Instant Messenger.png" width="32" height="32" id="iconoK"/>
<mx:Image x="50" y="10" source="../imagenes/Controller.png" width="32" height="32" id="iconoB"/>
<mx:Image x="50" y="88" source="../imagenes/Controller.png" width="32" height="32" id="iconoJ"/>
<mx:Image x="10" y="127" source="../imagenes/Controller.png" width="32" height="32" id="iconoM"/>
<mx:Image x="90" y="10" id="iconoC" source="../imagenes/Crash Catcher.png" width="32" height="32"/>
<mx:Image x="130" y="47" id="iconoH" source="../imagenes/Crash Catcher.png" width="32" height="32"/>
<mx:Image x="130" y="127" id="iconoP" source="../imagenes/Crash Catcher.png" width="32" height="32"/>
<mx:Image x="50" y="50" id="iconoF" source="../imagenes/Keychain.png" width="32" height="32"/>
<mx:Image x="130" y="10" source="../imagenes/Help &amp; Support.png" width="32" height="32" id="iconoD"/>
<mx:Image x="50" y="127" source="../imagenes/Help &amp; Support.png" width="32" height="32" id="iconoN"/>
<mx:Image x="10" y="50" id="iconoE" source="../imagenes/ichigo.png" width="32" height="32"/>
<mx:Image x="10" y="87" id="iconoI" source="../imagenes/ichigo.png" width="32" height="32"/>
<mx:Image x="90" y="127" id="iconoO" source="../imagenes/Keychain.png" width="32" height="32"/>
<mx:Image x="130" y="87" id="iconoL" source="../imagenes/Logo Final.png" width="32" height="32"/>
<mx:Image x="90" y="47" id="iconoG" source="../imagenes/Logo Final.png" width="32" height="32"/>
<mx:Button x="54" y="182" label="Aceptar" id="miIcono" click="iconoElegido()"/>
</mx:Panel>
</mx:Canvas>

ahora en un archivo action script es donde tengo la funcion que llamo con el boton aceptar de id "miIcono". la funcion iconoElegido(). y en action script tengo lo sig

stage.addEventListener(MouseEvent.CLICK, seleccionarIcono);
stage.addEventListener(MouseEvent.CLICK, esteIcono);
para estar escuchando los eventos del mouse
y esto

public function seleccionarIcono(event: MouseEvent):void
{
if(event.target.toString() == iconoAtaque.toString())
{
canvasIconos.x = event.stageX;
canvasIconos.y = event.stageY;
canvasIconos.visible=true;
ataqueDefensa = "Ataque";
}
else
{
if(event.target.toString() == iconoDefensa.toString())
{
canvasIconos.x = event.stageX;
canvasIconos.y = event.stageY;
canvasIconos.visible=true;
ataqueDefensa = "Defensa";
}
}
}

public function esteIcono(event: MouseEvent):void
{
var miIcono:String;
var imagen:Image;
//iconoElegido = event.target.toString();
miIcono = event.target.toString().substr(27,6);
//usuAtaque.text = event.target.content.source;
//usuAtaque.text = event.target.toString().substr(27,6);
imagen = event.target.content.valueOf().toString();
usuDefensa.text = event.target.content.valueOf().toString();
//trace(event.target);


imgAtaque.source = imagen.source;
usuAtaque.text = imgAtaque.source.toString();
//usuAtaque.text = imagen.source;

/*
if(ataqueDefensa == "Ataque")
{
switch(miIcono)
{
case "iconoA": imgAtaque.source = iconoA.source;
break;
case "iconoB": imgAtaque.source = iconoB.source;
break;
case "iconoC": imgAtaque.source = iconoC.source;
break;
case "iconoD": imgAtaque.source = iconoD.source;
break;
case "iconoE": imgAtaque.source = iconoE.source;
break;
case "iconoF": imgAtaque.source = iconoF.source;
break;
case "iconoG": imgAtaque.source = iconoG.source;
break;
case "iconoH": imgAtaque.source = iconoH.source;
break;
case "iconoI": imgAtaque.source = iconoI.source;
break;
case "iconoJ": imgAtaque.source = iconoJ.source;
break;
case "iconoK": imgAtaque.source = iconoK.source;
break;
case "iconoL": imgAtaque.source = iconoL.source;
break;
case "iconoM": imgAtaque.source = iconoM.source;
break;
case "iconoN": imgAtaque.source = iconoN.source;
break;
case "iconoO": imgAtaque.source = iconoO.source;
break;
case "iconoP": imgAtaque.source = iconoP.source;
break;
}
}
else
{
switch(miIcono)
{
case "iconoA": imgDefensa.source = iconoA.source;
break;
case "iconoB": imgDefensa.source = iconoB.source;
break;
case "iconoC": imgDefensa.source = iconoC.source;
break;
case "iconoD": imgDefensa.source = iconoD.source;
break;
case "iconoE": imgDefensa.source = iconoE.source;
break;
case "iconoF": imgDefensa.source = iconoF.source;
break;
case "iconoG": imgDefensa.source = iconoG.source;
break;
case "iconoH": imgDefensa.source = iconoH.source;
break;
case "iconoI": imgDefensa.source = iconoI.source;
break;
case "iconoJ": imgDefensa.source = iconoJ.source;
break;
case "iconoK": imgDefensa.source = iconoK.source;
break;
case "iconoL": imgDefensa.source = iconoL.source;
break;
case "iconoM": imgDefensa.source = iconoM.source;
break;
case "iconoN": imgDefensa.source = iconoN.source;
break;
case "iconoO": imgDefensa.source = iconoO.source;
break;
case "iconoP": imgDefensa.source = iconoP.source;
break;
}
}
*/
imgAtaque.visible = true;
imgDefensa.visible = true;
}

public function iconoElegido():void
{
canvasIconos.visible=false;
}

que hago mal?????

Por diego_G_09

31 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Feb 2010 09:33 pm
Lo que haces mal es ponerle el listener del click al stage... usa los eventos que dispachan las imagenes... algo de este estilo.

<mx:Image x="50" y="10" source="../imagenes/Controller.png" width="32" height="32" id="iconoB" click="esteIcono(event)/>

ahi si q podras obtener el source con el event.target.source... saludos

Por miguelmoraleda

Claber

430 de clabLevel

5 tutoriales

 

chrome
Citar            
MensajeEscrito el 18 Feb 2010 09:59 pm
sigo sin poder modifique el mxml como me dijiste y luego esto:

<mx:Image x="50" y="88" source="../imagenes/Controller.png" width="32" height="32" id="iconoJ" click="esteIcono(event)"/>

public function esteIcono(event:MouseEvent):void
{
info.text = event.target.toString();
info2.text = event.target.content.toString();
info3.text = event.targetcontentLoaderInfo.toString();

imgAtaque.source = event.target.source;

y nada de nada, no ahora ni siquiera me tira un string, probe con y sin toString a ver que me devolvia.
Yo lo hacia en el stage, porque supuestamente es lo mismo solo que pones una linea de codigo en vez de que en cada imagen ponga
<mx:Image x="50" y="88" ....... click="esteIcono(event)"/>

cual sera el problema?

Por diego_G_09

31 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Feb 2010 10:03 pm
Que raro man, yo lo hice y me funciono... lamento decirte q ya a esta altura me doy por vencido.. te deseo suerte. busca en google flex image gallery ;) ahi tienes q encontrar algo q te sirva. Saludos y lamento no haber sido de ayuda

Por miguelmoraleda

Claber

430 de clabLevel

5 tutoriales

 

chrome
Citar            
MensajeEscrito el 18 Feb 2010 10:13 pm
dale gracias por la ayuda, igual por las dudas si no borraste la prueba que hiciste me podrias pasar el codigo que veo que cosas tengo distintas capaz que asi lo soluciono, gracias!!

Por diego_G_09

31 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Feb 2010 10:16 pm
No puedo, porque lo hice sobre un proyecto en el que estoy trabajando.

Por miguelmoraleda

Claber

430 de clabLevel

5 tutoriales

 

chrome
Citar            
MensajeEscrito el 18 Feb 2010 10:24 pm
dale gracias seguire averiguando

Por diego_G_09

31 de clabLevel



 

firefox
Citar            
MensajeEscrito el 18 Feb 2010 10:56 pm
miguelmoraleda ya lo pude solucionar te comento como lo arregle

imgAtaque.source = event.target.parent.source;

parent es quien te da el objeto, y el famoso nombre de la funcion que retorna el objeto ja. ahi estaba el tema. gracias por tu ayuda igualmente.

Por diego_G_09

31 de clabLevel



 

firefox
Citar            
MensajeEscrito el 19 Feb 2010 12:26 am
Genial un gusto... investiga como usar el trace en flex... por lo que yo tengo entendido es posible usarlo con el flash player for debug... pero no tengo 100% claro como es el asunto.... pero con el trace puedes ver que tipo de objeto te estaba devolviendo y es mucho mas facil encontrar los errores...

Saludos

Por miguelmoraleda

Claber

430 de clabLevel

5 tutoriales

 

chrome

 

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