Comunidad de diseño web y desarrollo en internet online

usar replace para obtener un parte del nombre de un MC

Citar            
MensajeEscrito el 02 Oct 2012 06:44 pm
tengo una función que se activa al dar clic en una serie de movieclips que tengo:

Código ActionScript :

function Arrastrar(e:MouseEvent)
{
   e.target.startDrag();
   numerar(e);
}


Esta función llama a otra función denominada numerar:

Código ActionScript :

function numerar(e)
{
   var a:int=0;
   var nombre:String = e.target.name;
   var nombre2:String = nombre.replace("bol","");
   var valor:int = int(nombre2.replace("_mc", ""));
   
   trace (valor);
}


esta función numerar hace un replace con el nombre del MC para dejar sólo el valor numérico, por ejemplo tengo el MC con nombre bol10_mc, por lo tanto saco "bol" y "_mc" y dejo sólo el 10 que será el valor del MC, pero sólo me funciona con el primer MC, por ejemplo si selecciono bol20_mc, al mostrarlo en la salida con "trace (valor);" me aparece 0 :shock:

que estoy haciendo mal, mi idea es que como cada MC tiene un número en su nombre darle este mismo valor numérico para hacer algunas funciones después-

soy una novata en as :oops:
saludos y gracias.

Por danielillapp

35 de clabLevel



Genero:Femenino  

Aprendiz de la vida y AS3

chrome
Citar            
MensajeEscrito el 02 Oct 2012 07:31 pm
En realidad no necesitas dos replace, puedes hacer

var sub:String = nombre.substr(2, 2);
var val:int = int(sub)

EL problema es que los valores del 1 al 9 le tienes que agregar el 0 delante y no puedes irte mas de 99. Para simplificar, no le pongas _mc en el nombre. El truco consiste en hacer el cast a int luego de que hayas extraido el string. Si falla en convertir, te sale 0 (en ese caso traza el string también a ver que ocurre)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 02 Oct 2012 07:59 pm

solisarg escribió:

En realidad no necesitas dos replace, puedes hacer

var sub:String = nombre.substr(2, 2);
var val:int = int(sub)

EL problema es que los valores del 1 al 9 le tienes que agregar el 0 delante y no puedes irte mas de 99. Para simplificar, no le pongas _mc en el nombre. El truco consiste en hacer el cast a int luego de que hayas extraido el string. Si falla en convertir, te sale 0 (en ese caso traza el string también a ver que ocurre)

Jorge


me sigue apareciendo el valor 0, pero si imprimo trace(nombre); me aparece instance2, instance5
instance8, instance11, esto es dependiendo de que movieclip seleccione.


Mira mis movieclips son 5 cirsulos algo así como bolas de billar, cada una tiene un número: 10, 20, 30, 40 y 50, la idea es que cada uno de esos MC al ser presionado arroje el valor correspondiente, por eso lo saqué directamente de su nombre.

Mira la verdad yo antes programaba en php y me ha costado pasar a AS3, por eso estoy un poco complicada, he leído muchos tutoriales, ojalá me puedas ayudar.

Por danielillapp

35 de clabLevel



Genero:Femenino  

Aprendiz de la vida y AS3

chrome
Citar            
MensajeEscrito el 02 Oct 2012 08:05 pm
Entonces olvidaste ponerle nombre de instancia. Cuando arrastras un MC al escenario, en el inspector de propiedades le tenes que poner el nombre de instancia, el nombre de la biblioteca es otra cosa (como si fuera el nombre de la clase digamos)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 02 Oct 2012 09:55 pm
El problema no es que olvidaras poner el nombre de instancia como dice Jorge.

Lo que pasa es que estás usando "traget" para obtener el nombre objeto que ejecuta el evento.
Target devuelve el el objeto "en el último nivel" con el que el puntero haga contacto, por decirlo de alguna forma. Es decir...

Si tienes un MovieClip, lo lógico es que, como mínimo, haya un relleno dentro (por ejemplo, un cuadro rojo) y ese relleno es lo que te devuelve el "target". Los elementos que uno no instancia, flash por defecto los instancia con un nombre numerado: instance1, instance2, instance3... y así.

Para que te devuelva el nombre de instancia del MC al que das click directamente, usa "currentFrame".

Así... var nombre:String= e.currentTarget.name; // Esto sí te devuelve el nombre que tú le diste al movieclip.

Para tomar sólo el número, sigue el consejo de Jorge. lo mejro es usar substr().

Espero te sirva mi ayuda. Suerte!

Por joel_fox

28 de clabLevel



Genero:Masculino  

Yo soy yo.

firefox
Citar            
MensajeEscrito el 03 Oct 2012 11:26 am
gracias muchachos, se pasaron, finalmente el nombre de instancia estaba bien, lo que faltaba era el currentTarget, con esto se solucionó.
Saludos.

Por danielillapp

35 de clabLevel



Genero:Femenino  

Aprendiz de la vida y AS3

chrome
Citar            
MensajeEscrito el 03 Oct 2012 03:41 pm
Hasta ahora me doy cuenta que primero escribí "currentFrame" :S
Menos mal que es ejemplo sí escribí "currentTarget".

De nada, danielillapp, para eso es la comunidad! ;)

Por joel_fox

28 de clabLevel



Genero:Masculino  

Yo soy yo.

firefox

 

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