Comunidad de diseño web y desarrollo en internet online

Convirtiendo MC en botón de forma dinámica

Citar            
MensajeEscrito el 29 Oct 2010 01:13 am
Hola amigos.
Estoy tratando de llevar adelante un catálogo y me encontré con un problema que me tiene demorado.
Se trata de un catálogo que toma los artículos de archivos externos.
En mi primer paso, cargo varias miniaturas que se corresponden con los artículos disponibles.
Hasta llí llegué bien, pero no me doy cuenta cómo convertir a esa miniatura en botón, para que, al pulsar sobre esta, se cargue dinámicamente un nuevo swf externo.
Aquí lo que tengo hecho:

Código ActionScript :

this.stop();
//el campo totales tiene el total de artículos disponibles
//ese valor lo e cargado en otro frame anteriormente
var numtot:Number = new Number(totales.text);
var miniaturas:uint = numtot;
var i:uint;
for (i = 0; i < miniaturas; i++)
{
// Creamos una nueva instancia de miniatura.
var btmin:Mnt = new Mnt();
//variable para que las minis se llamen art1, art2, etc.
var nombre:String = "art" + (i + 1);
btmin.name = nombre;
// Definiendo el tamaño de cada miniatura
btmin.width = 40;
btmin.height = 40;
// Ubicamos las miniaturas en el escenario
btmin.x = (stage.stageWidth / miniaturas) * i;
btmin.y = stage.stageHeight / 2;
//el símbolo btmin que se va a cargar, ya contiene un campo de texto llamado art
//dentro del símbolo uso otro as para cargar una fotito miniatura
//pasando el nombre al campo de texto dentro de la nueva mini
btmin.art.text = btmin.name;
// Agregamos las instancias de miniaturas al escenario.
addChild(btmin);
}

Espero puedan ayudarme. gracias.

Por CRD

80 de clabLevel



Genero:Masculino  

Diseño Filete Ilustración

msie8
Citar            
MensajeEscrito el 29 Oct 2010 01:18 am
Tienes muchos errores de prolijidad general en tu código...

Veamos.... es malo crear referencias dentro de un for que luego jamás podrás volver a usar, es malo crear variables dentro de un for, es "raro" declarar i como lo hiciste, etc..

Más allá de eso, solo tienes que agregarle:

Código ActionScript :

btmin.addEventListener(MouseEvento.CLICK, doSomething,true,0,false);


Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

firefox
Citar            
MensajeEscrito el 29 Oct 2010 01:35 am
Gracias Hernán.
La verdad a duras penas estoy tratando de comprender AS3 y, un poco leyendo la ayuda de Flash, y otro poco probando, armé este código que seguramente estará desprolijo y raro, pero me resultó.
Espero llegar al nivel de prolijidad que corresponda.
Mientras tanto probé agregando esa línea y me dio un error:
1120: Acceso a una propiedad doSomething no definida

Por CRD

80 de clabLevel



Genero:Masculino  

Diseño Filete Ilustración

msie8
Citar            
MensajeEscrito el 29 Oct 2010 11:58 am
Pues porque no creaste la función:

Código ActionScript :

function doSomething(e:Event):void{
   trace(e.target);
}


Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

firefox
Citar            
MensajeEscrito el 29 Oct 2010 09:30 pm
Tenías razón Hernán, no puedo usar los nombres de cada mc e insito con este tema.
Ya conseguí hasta el momento crear los mc en e escenario.
En el siguiente código intento que, al pinchar un mc de los creados dinámicamente, en un campo de texto llamado "campo" se escriba el nombre del mc.
Si pincho el segundo debería escribirse "art2", el tercero "art3" y así etc. pero pinche cual pinche se escribe siempre "art10"
Aquí el nuevo (desprolijo) código que tengo:

Código ActionScript :

stop();
//el campo totales tiene el total de artículos disponibles
//ese valor lo e cargado en otro frame anteriormente
var numtot:Number = new Number(totales.text);
var miniaturas:uint = numtot;
var i:uint;
for (i = 0; i < miniaturas; i++)
{
// Creamos una nueva instancia de miniatura.
var boton:tt = new tt();
var nombre:String = "art" + (i + 1);
//variable para que las minis se llamen art1, art2, etc.
trace(nombre);
boton.name = nombre;
// Definiendo el tamaño de cada miniatura
boton.width = 25;
boton.height = 25;
// Ubicamos las miniaturas en el escenario
boton.x = (stage.stageWidth / miniaturas) * i;
boton.y = stage.stageHeight / 2;
//el símbolo btmin que se va a cargar, ya contiene un campo de texto llamado art
//dentro del símbolo uso otro as para cargar una fotito miniatura
//pasando el nombre al campo de texto dentro de la nueva mini
boton.art.text = boton.name;
//conversión a botón
function ruteado(event:MouseEvent):void{
//   campo.text = "tigre";
   campo.text = boton.name;
//   play();
   }
   boton.addEventListener(MouseEvent.CLICK, ruteado);
// Agregamos las instancias de miniaturas al escenario.
addChild(boton);
}

Por CRD

80 de clabLevel



Genero:Masculino  

Diseño Filete Ilustración

msie8
Citar            
MensajeEscrito el 30 Oct 2010 12:28 am
Ya lo he conseguido. Y para quien le pueda servir, dejo mi "desprolijo" pero efectivo código:

Código ActionScript :

stop();
//el campo totales es un TextField que tiene el total de artículos disponibles
//ese valor lo he cargado en otro frame anteriormente
var numtot:Number = new Number(totales.text);
var miniaturas:uint = numtot;
var i:uint;
for (i = 0; i < miniaturas; i++)
{
// Creamos una nueva instancia de miniatura.
var boton:tt = new tt();
//variable para que las minis se llamen art1, art2, etc.
var nombre:String = "art"+(i+1);
boton.name = nombre;
// Definiendo el tamaño de cada miniatura
boton.width = 25;
boton.height = 25;
// Ubicamos las miniaturas en el escenario
boton.x = (stage.stageWidth / miniaturas) * i;
boton.y = stage.stageHeight / 2;
//el símbolo btmin que se va a cargar, ya contiene un campo de texto llamado art
//dentro del símbolo uso otro as para cargar una fotito miniatura
//pasando el nombre al campo de texto dentro de la nueva mini
boton.art.text = nombre;
//ahora, si pinchan el botón, un TextField llamado campo identificará el nombre del botón
function ruteado(event:MouseEvent):void{
   campo.text = event.target.name;
   }
boton.addEventListener(MouseEvent.CLICK, ruteado);
// Agregamos las instancias de miniaturas al escenario.
addChild(boton);
}

Por CRD

80 de clabLevel



Genero:Masculino  

Diseño Filete Ilustración

msie8
Citar            
MensajeEscrito el 30 Oct 2010 04:27 am
Te lo he emprolijado, ya que estaba MUY mal armado. En especial crear una función dentro del for:

Código ActionScript :

stop(); 
function ruteado(event:MouseEvent):void
{ 
   campo.text = event.currentTarget.name; 
} 
var miniaturas:uint = uint(totales.text);
var instancias:Array = [];
for (var i:uint = 0; i < miniaturas; i++) 
{ 
instancias[i] = new tt();
instancias[i].name = "art"+(i+1);
instancias[i].width = instancias[i].height = 25;
instancias[i].x = (stage.stageWidth / miniaturas) * i; 
instancias[i].y = stage.stageHeight / 2; 
instancias[i].art.text = instancias[i].name;
instancias[i].addEventListener(MouseEvent.CLICK, ruteado,true,0,false);
this.addChild(instancias[i]); 
}

Se podría mejorar bastante más, pero al menos en líneas generales así debería ser.

Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

firefox

 

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