2011-09-02 9 views
5

Ho creato un pulsante in Flash e all'interno del quale ho un campo di testo e un MovieClip, entrambi con nomi di istanze impostati. Coprono tutti i 4 fotogrammi del pulsante, senza fotogrammi chiave.Problema con i nomi di istanza all'interno del pulsante

ho trovato non ho potuto accedere agli oggetti utilizzando i nomi di istanza che avevo impostato, quindi ho usato questo pezzo di codice per vedere cosa sta succedendo:

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 + "'); 
} 

ottengo questo come output:

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 

Quindi TextField e MovieClip sono lì, hanno appena avuto il loro nome di istanza resettato alla generica "istanza ###".

Qualcuno sa qual è il problema? Se faccio un pulsante MovieClip, funziona perfettamente (anche se devo controllare i frame da solo).

Sono consapevole dei diversi metodi ho potuto usare per ovviare a questo, ma questo significa cambiare un sacco di cose, e mi piacerebbe sapere perché SimpleButton di ignorare i nomi di istanza indicati in Flash

EDIT

Guardando dentro un po 'di più, sembra che anche se non ci sono fotogrammi chiave nel pulsante nella IDE Flash, Flash crea 4 istanze di ogni elemento (tracciando attraverso la upState per esempio mi darà un TextField con la nome istanza "instance2", mentre nel downState, il nome dell'istanza è "instance4"). Se cambio il testo in uno stato, non riflette negli altri.

sto pensando che quando Flash crea gli oggetti, non è la copia su tutte le proprietà correttamente (vale a dire il nome dell'istanza)

EDIT

Sono d'accordo che la risposta di Shane è una soluzione - I L'ho detto io stesso che conosco i diversi metodi per aggirare il problema, ma ignora il problema, non lo risolve (è l'unica ragione per cui non l'ho accettato). In primo luogo sono venuto a SO per vedere se qualcuno forse sa perché sta accadendo in primo luogo (tbh, sembra un bug nell'SDK).

Capisco anche il ragionamento alla base dell'argomento "non si deve accedere ai bambini in SimpleButton, se si desidera un maggiore controllo, utilizzare Sprite o MovieClip", ma non sono d'accordo. L'IDE Flash consente di creare pulsanti con istanze denominate al loro interno e i documenti SimpleButton consentono di accedere ai diversi stati, quindi per me questo è un comportamento accettato. Se SimpleButton può essere usato solo per pulsanti statici molto semplici e non modificabili (si pensi anche alla localizzazione), allora è piuttosto inutile. Puoi usare Sprite e MovieClip, ma devi controllare tu stesso i diversi stati, il che diventa imbarazzante. Ho la mia classe Button per gestire lo standard, ma non dovrei dover riscrivere le funzionalità di base dell'SDK, motivo per cui è un bug per me.

Terrò la taglia aperta per il tempo che è lì. Se non ottengo altro, allora lo darò a Shane.

+1

shanethehat ha assolutamente ragione, non è possibile accedere agli oggetti all'interno di Button. – hardik

+0

@Hardik è possibile accedere agli oggetti all'interno del pulsante, lo faccio nel codice sopra. Se è un caso di I * non dovrebbe *, allora è una storia diversa – divillysausages

+0

ok, se vuoi fare qualche effetto animato con il pulsante sul suo stato prova a creare MovieClip all'interno del pulsante. separare MovieClip su UP OVER DOWN. – hardik

risposta

5

Ciò è perché la classe flash.display.SimpleButton non eredita da DisplayObjectContainer, ei contenitori di stato non sono anche DisplayObjectContainers: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/SimpleButton.html

Fondamentalmente, semplici pulsanti sono per loro definizione semplice.Se vuoi un controllo più complesso sugli oggetti interni, devi usare Sprite o MovieClip con buttonMode impostato su true.

+1

'SimpleButtons 'Non sono' DisplayObjects' o 'DisplayObjectContainers', ma i loro stati su, su, giù e hit sono, che è il modo in cui si ricercano gli oggetti al loro interno in primo luogo – divillysausages

+2

SimpleButton _is_ a Visualizza oggetto. L'ereditarietà è SimpleButton -> InteractiveObject -> DisplayObject -> EventDispatcher -> Object. – shanethehat

+0

scusa, volevo chiarire che sto cercando gli oggetti all'interno degli stati di SimpleButton (upState, downState, ecc.). Esistono, semplicemente non hanno il loro nome di istanza impostato – divillysausages

Problemi correlati