Comunidad de diseño web y desarrollo en internet online

Array a Number :(

Citar            
MensajeEscrito el 12 Mar 2011 05:08 am
Hola todos tengo un pequeño porblema quiero convertir cada uno de los elementos del array que tengo aca a un number y lo estyo tratando de lograr de esta manera, pero por alguna razon el trace me dice NaN :S alguine me peue ayudar porfavor?

var btnarray:Array = [informacion,galeria,ubicacion,contactenos];

for (var i:uint = 0; i < btnarray.length; i++) {
btnarray[i].addEventListener (MouseEvent.CLICK, onNavClick);
btnarray.name=String(i);
}

function onNavClick(evt:MouseEvent):void {
selectedSection = Number(evt.target.name);

trace (selectedSection);


}

Por dalladaniel

22 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 12 Mar 2011 07:31 am
BuenAS:

El mensaje que te da es debido a que no es un número (NaN). Tal como lo tienes, los botones guardados en las variables informacion,galeria,ubicacion,contactenos deberían llamarse "0", "1", "2", "3" para que al hacer

selectedSection = Number(evt.target.name);

sí sea un número. ¿Es como lo has llamado?

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 12 Mar 2011 09:17 am
BuenAS:

Ya sé de dónde viene el problema, en AS no puedes llamar a una instancia con un nombre que empiece por un número, y menos, un número. A la hora de nombrar deberías utilizar algo así como "boton_" + String(i).

Yo la verdad es que no suelo recurrir al nombre de las instancias; me gusta más utilizar Dictionary(), y SUPONIENDO QUE TUS BOTONES TIENEN NOMBRE DE INSTANCIA informacionBtn, galeriaBtn, ubicacionBtn, contactenosBtn

Código ActionScript :

var selectedSection:int;
var botones:Dictionary = new Dictionary();
botones[informacionBtn]   = 0;
botones[galeriaBtn]    = 1;
botones[ubicacionBtn]   = 2;
botones[contactenosBtn] = 3;

for (var boton:* in botones) {
   DisplayObject(boton).addEventListener(MouseEvent.CLICK, onNavClick);
};

function onNavClick(evt:MouseEvent):void {
   selectedSection = botones[evt.target]; 
   trace (selectedSection);
}


Utilizando un Dictionary no tienes que recurrir al nombre de instancia y, además, puedes llamarlo como quieras. He seguido tu criterio de numerarlos con 0, 1, 2... pero no habría mayor problema a la hora de guardar cadenas de texto (SeccionInformación, Seccion Galería,...) y que selectedSection fuese una cadena de texto, o el tipo de dato que te interese.

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 12 Mar 2011 09:21 am
...por ejemplo, si quisieras que fuese texto (la etiqueta de cada sección, por ejemplo, o una url):

Código ActionScript :

var selectedSection:String;
var botones:Dictionary = new Dictionary();
botones[informacionBtn]   = "Información";
botones[galeriaBtn]    = "Galería";
botones[ubicacionBtn]   = "Ubicación";
botones[contactenosBtn] = "Contáctenos";

for (var boton:* in botones) {
   DisplayObject(boton).addEventListener(MouseEvent.CLICK, onNavClick);
};

function onNavClick(evt:MouseEvent):void {
   selectedSection = botones[evt.target]; 
   trace (selectedSection);
}

A mí me gusta más así porque queda más "visual".

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 12 Mar 2011 01:07 pm
Gracias lukanicos probare con eso pero tengo una duda, ese *in botones a que hace referencia?

Por dalladaniel

22 de clabLevel



Genero:Masculino  

safari
Citar            
MensajeEscrito el 12 Mar 2011 03:18 pm
Pues como no sabía qué eran tus botones, puse el * (comodín que equivale a tipificarlo como cualquier cosa) para curarme en salud.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 12 Mar 2011 03:25 pm
wow gracias lukanicos es :S la primera vez q veo dictionary en as3 :S
asi q te pregunto algo mas sin el animo de molestarte :S el loop for d eun dictionary es
for (var boton:* in botones) donde var boton es la variable que es el diccionario y botones es el diccionario dond eesta contenido?
sabes donde peudo lleer mas de diccionarios para entender esto, mil gracias!

Por dalladaniel

22 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 12 Mar 2011 03:36 pm
BuenAS:

El Dictionary en ActionScript es muy básico (en otros lenguajes tiene bastante más potencia). Lo que te permite es "guardar cosas" con la referencia de un objeto.

Dictionary

Con un Array accedes a su contenido con su índice, un número entero

miArray[0] = miMovieClip;

Con el Dictionary accedes con un objeto (el que quieras) a un dato:

miDictionary[objeto] = _aquí_pones_el_valor_que_quieras

y es bastante útil cuando quieres rápidamente asociar una serie de valores a una serie de objetos, y no tienes pensado trabajar con clases.

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 12 Mar 2011 04:22 pm
Hola nuevmaente :S creo q me hice bolas en este asunto, bueno digamos que en el stage tengo dos botones uno q cuyo nombre d eisntancia es informacion y el otro galeria, var botones:Dictionary = new Dictionary();
botones[informacion] = 0;
botones[galeria] = 1;
esa seria la manera de agregarlos al dictionary pero como creo un loop para ese dictionary para agregarles los listeners y que almacene el numero seria de esta manera?
for (var boton:String in botones) {
DisplayObject(boton).addEventListener(MouseEvent.CLICK, onNavClick);
};

porque cunado intento eso me da este error

TypeError: Error #1034: Error de conversión forzada: no se puede convertir "[object SimpleButton]" en flash.display.DisplayObject.
at Namastereal_fla::navegacion_8/frame1()
at flash.display::MovieClip/nextFrame()
at Namastereal_fla::namaste_2/next()

Lamento incomodarte tanto con tanta preguntadera pero es la primera vez que uso el dictionary, otra pregunta que tengo es el DisplayObject porque se esta usando?, y la ultima es, porque es mejor usasr clases en estos casos?

Por dalladaniel

22 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 12 Mar 2011 04:35 pm
En el for no lo tipifiques como String, déjale el asterisco (*). Un SimpleButton, un Sprite, un MovieClip heredan de DisplayObject; o sea, SON DisplayObject. Como comenté más arriba, lo pongo para curarme en salud. Pero si sabes seguro que vas a utilizar un SimpleButton, cambialo por SimpleButton.

Cuando trabajas con clases puedes guardar estos datos/referencias, en la clase. Por ejemplo, si te creas una clase BotonUrl que extienda a SimpleButton, por ejemplo, puedes implementar una propiedad pública llamada url y (si tuvieras la clase), simplemente hacer:

var boton:BotonUrl = new BotonUrl();
boton.url = "http://www.miDominio.com/home/";

Podrías guardar la url directamente en la clase

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 12 Mar 2011 04:42 pm
Genial!!! sos un genio :O, realmente interesante aprender estas cosas :D te agradesco infinitamente!!!!
ahora una ultima pregunta, si creo una clase con esto, la aplico al elemento que contiene los botones y los botones lo podran usar?, y si digamos, los botones no aparecen en el primer frame pero estan en el 25 la clase funcionara en el 25 y no dara el error de que no existe el display object? o digamos que haga un remove de un loader que no esta existiendo aun pero si lo hara apenas exista?

Por dalladaniel

22 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 12 Mar 2011 05:31 pm
Echa un vistazo a este ejemplo

Descargar Ejemplo >>

Va comentado el caso primero del que hablábamos (he utilizado botones de la case Button, para hacerlo rápido), y me he creado una clase muy simple llamada BotonUrl. Extiende a Button (por lo que a todos los efectos es un Button) y tiene la propiedad url. En esta propiedad guardo la url de cada botón y verás que al pulsar en cualquiera de ellos se hace un trace con su correspondiente url.

Para este caso tan simple quizá no fuera necesario crearte una clase, pero si tus componentes son más complejos puede venir bien.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 12 Mar 2011 05:47 pm
Realmente interesante :O
Reitero agradezco mil veces por tu paciencia :)
ahora solo quiero discutir sino te moelsta una situacion, digamos que tengo un mc q se repite en toda la navegacion q contiene la botonera, y la idea es q los botones tengan un if que diga que si exite un contenedor que tiene un loader para unos thumbs xml lo borre, pero cuando lo creo da un error xq obviamente ese objeto no existe aun... me preguntaba si creo una clase ese error deja de aparecer?, o es xq estoy haciendo al revez las cosas por una via poco eficiente, ahora lo solucione con un removeChildAt(); pero si quisiera hacer es un removeChild (del_ mc_ exacto) como podria hacerlo si el elemento no existe apenas empeiza la navegacion :S

Por dalladaniel

22 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 12 Mar 2011 06:03 pm
BuenAS:

Lo primero, decir que yo soy más de clases y todo ese rollo; de hecho, si puedo evito escribir código en la línea de tiempo, así que no sé si te despistaré más que otra cosa :)

Yo entiendo que un botón debe ser eso: un botón. Todo lo sofisticado que quieras, con unos efectos rollOver impresionantes, pero un botón. No creo que un botón tenga que encargarse de chequear si hay algo que borrar, por lo que este código nunca lo pondría dentro de un botón.

Y por otro lado, el flujo de una aplicación (un swf) funciona a base de eventos: el cliente pulsa un botón, una tecla, se carga un xml, se cargan unas imágenes, etc. Y normalmente es ahí, en el método controlador del evento que se ha producido donde hay que decidir qué se hace.

Posiblemente -no lo sé-, esos thumbnails que quieres eliminar han de desaparecer en un momento dado. No sé, imaguinemos que es cuando el cliente pulse el botón "Contactenos". Pues en el método controlador del MouseEvent.CLICK de este botón escribo el código para borrar dicho thumbnails. Así, no lo borro ni antes ni después chequeando un if; lo borro cuando el cliente pulse Contáctenos. No sé si me explico, o lo lío más ;)

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 12 Mar 2011 06:18 pm
Ah que genial lo que has dicho, grandes palabras y si es cierto, es ilogico poner eso en un boton, la cuestion es esta, tengo 4 botones info, galeria, ubicacion y contacto, al hacer lcick en galeria pum carga todo un XML con loader,. contenedor, ubicacion y full thumbs, y la idea es q luego al hacer click en cada boton, mire si existe eso y lo borre, por eso me preguntaba lo del if, pero el if se vuelve inutil al verificar si existe un contenedor_mc si no existe realmente o sino ha sido llamado, pro buneo entiendo lo q dices y ya medio me hago a la idea de como solucionarlo, igualmente te agradezco inmesnamete por el conocimiento compartido ha sido muy util y relamente valioso :), lamento haber molestado si es que lo hice un saludo y ojala nos crucemos en alguna otra ocasion :)

Por dalladaniel

22 de clabLevel



Genero:Masculino  

chrome

 

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