• Registrati
Benvenuto su codeinvaders.net la community italiana dedicata agli sviluppatori!
Puoi partecipare alle discussioni anche attraverso facebook, twitter e google+.
JS Day
  • google plus
  • facebook
  • twitter
Codeinvaders.net, domande e risposte per sviluppatori!
Partecipa a questa community rispettando tutti i suoi membri che, per il puro piacere di condividere, forniscono risposte e suggerimenti.
Classifica migliori utenti del mese 07/2017
  1. 4240 Punti

  2. 3980 Punti

  3. 3480 Punti

  4. Luca Rainone

    2400 Punti

I premi del mese
Posizione 1: Buono Amazon da 10 euro
Posizione 2: Sconto 40% su un libro O'Reilly

Problema evento da tastiera su swf caricato dinamicamente

Salve,
ho un file che contiene al suo interno un pulsante, cliccando sul quale carico dinamicamente un swf esterno.
questo swf quando si apre sullo stage non ha nulla, dinamicamente carico da libreria la scena. in questo file ho però questa funzione:
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);

Quando clicco sul pulante da dentro al primo swf però mi restituisce questo errore:
TypeError: Error #1009: Impossibile accedere a una proprietà o a un metodo di un riferimento oggetto null.
riferito all'swf che carico dove c'è la funzione evento da tastiera.

Se invece apro direttamente il secondo swf tutto funziona, anche l'evento da tastiera.come mai?

quesito posto 27 Maggio 2013 in actionscript da anonimo
   

1 Risposta

+1 voto

Probabilmente perché "stage" non è definito.
Quando carichi un swf esterno, nel momento in cui il costruttore viene chiamato, la proprietà stage non è ancora stata creata.
Per risolvere dovresti aggiungere al costruttore del secondo swf un listener all'evento Event.ADDEDTOSTAGE. Per esempio:

// constructor
public function yourClass() {
     this.addEventListener(Event.ADDED_TO_STAGE, _init);
}
function _init(e:Event) {
    stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
}

in questo modo usi la proprietà stage solo quando effettivamente viene creata, e non prima.

risposta inviata 27 Maggio 2013 da Luca Rainone (2,400 punti)

Aggiungo che per evitare che il listener resti in memoria dovresti rimuoverlo aggiungendo nella funzione _init la seguente riga di codice

e.target.removeEventListener(e.type, arguments.callee);

 

Osservazione corretta. Non volevo uscire troppo fuori tema (alias: non ci avevo pensato :D )
Puoi partecipare alle discussioni anche attraverso facebook e twitter.
...