2011-09-02 5 views
5

He creado un botón en Flash, y en el interior tengo un TextField y un MovieClip, ambos con nombres de instancia establecidos. Cubren los 4 fotogramas del botón, sin fotogramas clave.Problema con nombres de instancia dentro del botón

me encontré con que no podía acceder a los objetos utilizando los nombres de instancia que se había propuesto, por lo que utiliza esta pieza de código para ver lo que está pasando:

var obj:DisplayObject = this.m_graphics.btnChange.upState; 
for (var i:int = 0; i < obj.numChildren; i++) 
{ 
    trace("We have an object at " + i + " - " + obj.getChildAt(i) + ": " + obj.getChildAt(i).name); 
    var t:TextField = obj.getChildAt(i) as TextField; 
    if (t == null) 
     continue; 

    trace(" The textfield has text '" + t.text + "'); 
} 

me sale esto como resultado:

We have an object at 0 - [object Shape]: instance195 
We have an object at 1 - [object TextField]: instance199 
    The textfield has text 'Change' 
We have an object at 2 - [object MovieClip]: instance203 

Por lo que TextField y MovieClip están ahí, simplemente han restablecido sus nombres de instancia a la "instancia genérica ###".

¿Alguien sabe cuál es el problema? Si hago que el botón sea un MovieClip, funciona bien (aunque tengo que controlar los fotogramas yo mismo).

Soy consciente de los diferentes métodos podría utilizar para solucionar este problema, pero eso significa cambiar muchas cosas, y me gustaría saber por qué SimpleButton a pasar por alto los nombres de instancia establecidos en flash

EDITAR

buscando en él un poco más lejos, parece que a pesar de que no hay fotogramas clave en el botón en el IDE de flash, flash crea 4 instancias de cada elemento (trazado a través de la upState, por ejemplo, me dará una TextField con el nombre de instancia "instancia2", mientras que en el downState, el nombre de instancia es "instancia4"). Si cambio el texto en un estado, no se refleja en los demás.

Estoy pensando que cuando Flash crea los objetos, no es la copia sobre todas las propiedades correctamente (es decir, el nombre de la instancia)

EDITAR

Estoy de acuerdo que la respuesta de Shane es una solución - I Me dije a mí mismo que conozco los diferentes métodos para evitar el problema, pero ignora el problema, no lo resuelve (es la única razón por la que no lo he aceptado). Llegué a SO en primer lugar para ver si alguien quizás sabe por qué está sucediendo en primer lugar (tbh, parece un error en el SDK).

También entiendo el razonamiento detrás del argumento "no deberías acceder a los niños en SimpleButton; si quieres tener más control, usa Sprite o MovieClip", pero no estoy de acuerdo. Flash IDE le permite crear botones con instancias con nombre dentro de ellos, y los documentos SimpleButton le dan acceso a los diferentes estados, por lo que para mí, este es el comportamiento aceptado. Si SimpleButton solo puede usarse para botones estáticos muy básicos e inmutables (también piense en la localización), entonces es bastante inútil. Puede usar Sprite y MovieClip, pero luego tiene que controlar los diferentes estados usted mismo, lo que se torna incómodo. Tengo mi propia clase de botón para manejar el texto estándar, pero no debería tener que reescribir la funcionalidad básica del SDK, que es la razón por la cual para mí es un error.

Mantendré el botín abierto por el tiempo que esté allí. Si no consigo nada más, se lo daré a Shane.

+1

shanethehat tiene toda la razón, no se puede acceder a objetos dentro de Button. – hardik

+0

@Hardik puede acceder a objetos dentro del botón, lo hago en el código anterior. Si se trata de un caso de I * no debería *, entonces esa es una historia diferente – divillysausages

+0

bien, si quieres hacer un efecto animado con el botón en su estado, intenta crear el botón dentro de MovieClip. separe MovieClip en UP OVER DOWN. – hardik

Respuesta

5

Esto es porque la clase flash.display.SimpleButton no hereda de DisplayObjectContainer, así como los recipientes del estado no son DisplayObjectContainers: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/SimpleButton.html

Básicamente, botones simples son, por su definición simple.Si desea un control más complejo sobre los objetos internos, deberá usar un Sprite o MovieClip con buttonMode configurado en verdadero.

+1

'SimpleButtons 'ellos mismos no son' DisplayObjects' o 'DisplayObjectContainers', pero sus estados arriba, abajo, abajo y golpe son, que es la forma de buscar objetos dentro de ellos en primer lugar – divillysausages

+2

SimpleButton _es_ un objeto de visualización. Su herencia es SimpleButton -> InteractiveObject -> DisplayObject -> EventDispatcher -> Object. – shanethehat

+0

lo siento, lo que quise aclarar fue que estoy buscando los objetos dentro de los estados SimpleButton (upState, downState, etc.). Existen, simplemente no tienen sus nombres de instancia establecidos – divillysausages

Cuestiones relacionadas