AS3 llama a un elemento recién agregado

Estoy agregando un elemento de clip de película ("lastSlide") a otro elemento de clip de película ("endLogoButton"). El elemento agregado tiene un hijo que es un botón ("endLogoButton"). ¿Cómo puedo llamar a ese botón?

    mcSlideHolder.addChild(lastSlide);
  /*mcSlideHolder.getChildByName("endLogoButton").buttonMode = true;;
    mcSlideHolder.getChildByName("endLogoButton").mouseChildren = false;
    mcSlideHolder.getChildByName("endLogoButton").useHandCursor  = true;*/
    lastSlide.endLogoButton.addEventListener(MouseEvent.CLICK, linkClick);

Como principiante, estoy luchando ... pero no puedo hacer que funcione ... Siempre me dice que el acceso a una referencia de Nullobject no es posible.

Gracias por cualquier consejo!

preguntado el 16 de mayo de 11 a las 16:05

¿Tiene este problema cuando se quitan los comentarios de las tres líneas o el error aún se produce con el código anterior tal como está? Puedo ver por qué las líneas comentadas arrojarían un error. -

¿Estás seguro de que mcSlideHolder y lastSlide ya están instaladas? -

@Corey: descomentado y comentado no hay versión sin error :-( -

2 Respuestas

Puede 'excavar' en los objetos anidados para llegar a la instancia del botón o puede agregar detectores de eventos a la instancia del botón antes de agregarla a su contenedor principal y luego dejar que su evento de clic se expanda.

Tengo algunos problemas para entender qué está anidado dentro de qué en su caso, pero veo que está intentando getChildByName. getChildByName solo obtiene un hijo directo (no un hijo de un hijo) por su nombre de instancia, (no su nombre de variable).

Ejemplo de excavación: lastSlide.getChildByName ("endLogoButton"). AddEventListener (MouseEvent.CLICK, linkClick);

or

lastSlide.name = "myLastSlide"; mcSlideHolder.getChildByName ("myLastSlide"). getChildByName ("endLogoButton"). addEventListener (MouseEvent.CLICK, linkClick);

Si lastSlide se colocó en el escenario visualmente en el IDE de Flash, entonces podría establecer el nombre de instancia myLastSlide allí en el panel de propiedades en lugar de establecer la propiedad name en as3.

contestado el 16 de mayo de 11 a las 22:05

¡Eso fue todo! ¡Gracias por tu ayuda! - haemse

Sin embargo, ¿por qué no puedo hacer: lastSlide.endLogoButton.addEventListener (MouseEvent.CLICK, linkClick); ??? - haemse

No puede hacer eso porque lastSlide es de tipo MovieClip que no tiene una propiedad conocida llamada 'endLogoButton'. Solo TÚ sabes que hay un objeto llamado así dentro. Sin embargo, puede crear su propia clase llamada MySlide que amplíe MovieClip y darle una propiedad pública llamada endLogoButton, entonces podría hacer lo que está pidiendo. - ABCD.ca

o tal vez: intente enviar "lastSlide" a un MovieClip como:

MovieClip(mcSlideHolder.getChildByName("lastSlide")).getChildByName("endLogoButton").addEventListener(MouseEvent.CLICK, linkClick);

Esto funcionó para mí varias veces cuando apareció el error "posible objeto sin referencia" al hacer referencia a un clip de película que se agregó claramente al escenario.

contestado el 17 de mayo de 11 a las 02:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.