Comunidad de diseño web y desarrollo en internet online

duda con getChildByName()

Citar            
MensajeEscrito el 05 Dic 2008 05:09 pm
Hola
Estoy tratando de hacer una botonera en AS3. en el escenario tengo varios clips-botones, con sus respectivos nombres de instancia. en el main timeline tengo una variable activeButton que almacena el nombre del boton activo.
Dentro del clip, puse los event listeners y sus funciones para los estados de up, over, down, etc. el problema es con la funcion down, que se activa al hacer click sobre el boton. la primera linea de la funcion es la q no funciona:

function down(evt:MouseEvent):void
{
MovieClip(this.parent.getChildByName(activeButton)).gotoAndStop("up");
btnLabel.textColor=0xFF0000;
MovieClip(parent).activeButton=this.name;
this.gotoAndStop("down");
}

Me sale el error "undefined property activeButton". :?
Sin embargo, cuando pongo la funcion en el main timeline, escribo

MovieClip(this.getChildByName(activeButton)).gotoAndStop("up")

Y esto si funciona perfectamente. ¿Porque? Alguien puede explicarme porque el primer ejemplo no funciona, a pesar que le estoy "casteando" la informacion? Cual es el problema?

Por nazcaline

272 de clabLevel

3 tutoriales

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 06 Dic 2008 01:33 pm
Porque activeButton tambien esta en parent, prueba:

MovieClip(this.parent.getChildByName(this.parent.activeButton)).gotoAndStop("up");

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 09 Dic 2008 06:24 pm
hola
pues he probado lo que dices y nada. igual me sale el error de no encontrar una propiedad llamada activeButton. la verdad me ha dado dolor de cabeza pensando en una forma de solucionar esto, he tratado todas las combinaciones posibles.
si a alguien se le ocurre algo, lo agradeceria mucho.
saludos

Por nazcaline

272 de clabLevel

3 tutoriales

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 09 Dic 2008 11:06 pm
Ya lo resolvi, lo pongo aqui por si a alguien le interesa.
Solisarg me sugirio:

solisarg escribió:

Porque activeButton tambien esta en parent, prueba:

MovieClip(this.parent.getChildByName(this.parent.activeButton)).gotoAndStop("up");



probe esto y no funciono. entonces trate esto:

MovieClip(this.parent.getChildByName(MovieClip(parent).activeButton)).gotoAndStop("up");

y por fin funciono. es decir, tuve que hacer un doble casting de informacion (porque? era necesario? si al poner this.parent.getChildByName ya se suponia que estaba en ese nivel, no?)
en fin.

saludos

Por nazcaline

272 de clabLevel

3 tutoriales

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 10 Dic 2008 01:28 am
Guauuuuu la verdad, para lo que deseas hacer no es necesario tanto(en AS3).
Puedes guardar la referencia del contenedor en una variable y utilizarla cada vez q lo necesites. Si pudieras enviar un archivo de tu fla, se podría hacer algo más sencillo y que englobe todo.
Salu2

Por emedinaa

196 de clabLevel

2 tutoriales

Genero:Masculino  

Lima Perú

firefox
Citar            
MensajeEscrito el 10 Dic 2008 07:51 am

nazcaline escribió:

...tuve que hacer un doble casting de informacion (porque? era necesario? si al poner this.parent.getChildByName ya se suponia que estaba en ese nivel, no?)

Cuando escribimos "parent", nos estamos refiriendo al "padre", pero Flash sólo sabe del padre que es un DisplayObject. Un DisplayObject no tiene más propiedades que las de la Clase DisplayObject. Así que de algún modo le tenemos que decir que nuestro "padre" es algo más que un DisplayObject. Se usa MovieClip -aunque se podría usar Main, o la clase de documento de que derivara nuestra película principal- porque MovieClip es una clase "no sellada", abh, una clase en la que no nos dará un error si preguntamos por una variable o un método que no exista y para darle mayor generlidad a nuestro Objeto.

Y NO, no estamos en ese nivel, siempre estamos en el nivel del objeto. Por eso hay que usar parent en los dos sitios

asphky escribió:


Guauuuuu la verdad, para lo que deseas hacer no es necesario tanto(en AS3).
Puedes guardar la referencia del contenedor en una variable y utilizarla cada vez q lo necesites

Y también hacer un patrón Singelton, pero es matar moscas a cañonazos. Si queremos simplificar, podemos usar una variable auxiliar. Pero no es necesario pasarle una referencia al padre cuando creamos el nuevo objeto.

Código ActionScript :

var padre:MovieClip=MovieClip(this.parent); //<--una referencia al padre
padre.getChildByName(padre.activeButton)).gotoAndStop("up");

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Dic 2008 01:50 pm
Sigue siendo demasiado, para lo que se quiere hacer...
var padre:MovieClip=MovieClip(this.parent); <-- Puedes guardar la referencia del contenedor en una variable
Nadie hablo de singleton....
Bueno.. la idea es solucionar el problema :)

Por emedinaa

196 de clabLevel

2 tutoriales

Genero:Masculino  

Lima Perú

firefox
Citar            
MensajeEscrito el 10 Dic 2008 02:54 pm
Lo siento, Asphyk, creí que te referias a pasarle como argumento al constructor el padre que fuera -lo cual me pone de los nervios-
Nota:Sólo tiene padre un Objeto si se le añade al stage. Así que hay que controlar el evento ADD o el evento ADD_TO_STAGE

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Dic 2008 05:14 pm
Muchas gracias por sus comentarios.
Esta area de AS3 es la que me ha dado mas problemas en entender, y aqui sigo en la lucha. (es decir el parent, casting, etc)
Sí, tienes razón, ya he modificado el código para usar una variable como referencia al padre y el código está mas elegante.
Lo que he aprendido tambien es que el getChildByName no sólo acepta strings como parámetro, sino también referencias o variables, que evalúa para obtener el nombre.
Saludos, ya los seguiré molestando con más preguntas :oops:

Por nazcaline

272 de clabLevel

3 tutoriales

Genero:Masculino  

firefox

 

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