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.
shanethehat ha assolutamente ragione, non è possibile accedere agli oggetti all'interno di Button. – hardik
@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
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