Orario: 23-05-2013, 6:01 Benvenuto ospite! (Log inRegistrati)


Rispondi 
AS3: refresh button
Autore Messaggio
safaryway
Junior Member

Messaggi: 22
Registrato: Mar 2012
Offline Offline
#1 AS3: refresh button
0
Salve a tutti,
ho una Display list in cui ho inserito diversi Child.
Il mio problema è che vorrei fare un refresh della pagina, eliminando in un colpo tutti i Child e ricaricare lo stage (cioè richiamare la classe che lo compone).
Questa procedura:
Codice PHP:
while(stage.numChildren)
  {
    
stage.removeChildAt(0);
  } 
eliminando tutti i Child, mi lascia la pagina bianca, non eseguendo l'istruzione
Codice PHP:
var new_page class1 = new class1(); 
Come posso risolvere il problema?
Grazie a tutti
27-04-2012 10:17
Trova tutti i messaggi di questo utente Cita questo messaggio nella tua risposta
mastorna


Messaggi: 259
Registrato: Jan 2011
Offline Offline
#2 RE: AS3: refresh button
0
non ti basta fare removechild della vecchia class1 e addchild della nuova dopo averla istanziata?

Sebastiano Morando
Atraxgames
27-04-2012 12:28
Visita il sito web di questo utente Trova tutti i messaggi di questo utente Cita questo messaggio nella tua risposta
safaryway
Junior Member

Messaggi: 22
Registrato: Mar 2012
Offline Offline
#3 RE: AS3: refresh button
0
putroppo no, perché come ho detto mi vien fuori una pagina bianca; devo poi eseguire il refresh per far ripartire l'intero programma, e non solo la singola class1 (che è quello che voglio fare)
27-04-2012 13:21
Trova tutti i messaggi di questo utente Cita questo messaggio nella tua risposta
mastorna


Messaggi: 259
Registrato: Jan 2011
Offline Offline
#4 RE: AS3: refresh button
0
perchè vuoi far ripartire tutto? Ti consiglio comunque di crearti un unico "contenitore" all'interno del quale inserire tutti gli oggetti, e di togliere/ri-istanziare solo quello

Sebastiano Morando
Atraxgames
27-04-2012 13:42
Visita il sito web di questo utente Trova tutti i messaggi di questo utente Cita questo messaggio nella tua risposta
safaryway
Junior Member

Messaggi: 22
Registrato: Mar 2012
Offline Offline
#5 RE: AS3: refresh button
0
grazie mastorna,
cmq credo di essere vicino alla soluzione: rimuovere le istanze per nome (visto che hanno tutte lo stesso nome) e poi reistanziare la stessa vecchia classe;
Codice PHP:
removeChild(getChildByName);
var 
new_page class1 = new class1(); 
ora praticamente mi toglie soltanto una istanza su N istanze create...non l'ultima, ma una a caso...e poi mi sovrascrive la new class1 agli oggetti vecchi.
ok ho risolto!!!
nella variabile "l0" ho salvato il numero esatto di volte in cui tale istruzione deve essere eseguita; in tal modo vengono rimossi esattamente tutti gli oggetti istanziati
Codice PHP:
public function go(event:MouseEvent):void{    
      for (var 
i:int=0l0i++){
        
removeChild(getChildByName("children"));
      }
      var 
mYclass class1= new class1();
      
addChild(mYclass);

(Questo messaggio è stato modificato l'ultima volta il: 27-04-2012 15:01 da safaryway.)
27-04-2012 14:41
Trova tutti i messaggi di questo utente Cita questo messaggio nella tua risposta
safaryway
Junior Member

Messaggi: 22
Registrato: Mar 2012
Offline Offline
#6 RE: AS3: refresh button
0
FUNZIONE REFRESH: funzione che cancella tutti gli oggetti nello stage e reistanzia la stessa classe
dopo tanto penare, ecco la soluzione definitiva:
Codice PHP:
public function refresh_inizio(event:MouseEvent):void{    
      var 
this.numChildren;
      for (var 
i:int=0ni++){
          
this.removeChildAt(0);        
      }          
      var 
inizio_ inizio = new inizio();
      
addChild(start_);      

27-04-2012 16:14
Trova tutti i messaggi di questo utente Cita questo messaggio nella tua risposta
Attila0413
Junior Member

Messaggi: 36
Registrato: Mar 2010
Offline Offline
#7 RE: AS3: refresh button
0
(27-04-2012 16:14)safaryway ha scritto:  FUNZIONE REFRESH: funzione che cancella tutti gli oggetti nello stage e reistanzia la stessa classe
dopo tanto penare, ecco la soluzione definitiva:
Codice PHP:
public function refresh_inizio(event:MouseEvent):void{    
      var 
this.numChildren;
      for (var 
i:int=0ni++){
          
this.removeChildAt(0);        
      }          
      var 
inizio_ inizio = new inizio();
      
addChild(start_);      


Avresti potuto usare removeChildren e risparmiarti il ciclo for.

In ogni caso, così facendo rimuovi i children dallo stage ma lasci un sacco di riferimenti in giro, compresi i children annidati, impedendo al garbage collector di liberare memoria. Per cose semplici come banner o altro magari puoi far finta di niente, ma se stai lavorando a un gioco ti conviene crearti una funzione dispose un po' più elaborata.

[Immagine: 2eg8wtv.png]
(Questo messaggio è stato modificato l'ultima volta il: 03-05-2012 10:21 da Attila0413.)
03-05-2012 10:20
Trova tutti i messaggi di questo utente Cita questo messaggio nella tua risposta
Rispondi 


Vai al forum: