detruire un objet instancié par createClassObject()

detruire un objet instancié par createClassObject() - Flash/ActionScript - Programmation

Marsh Posté le 27-02-2006 à 11:26:46    

Salut all !
 
Voila le probleme.
J'ai ca:
RB11 = RadioButton(_level.createClassObject(RadioButton, "RBtest", _level.getNextHighestDepth()));
RB11.data = "1";
RB11._name = "RB11";
RB11.label = this.r1;
RB11.groupName = this.Qlabel;
RB11.move(30, 130);
 
(dans une fonction)
 
je voudrais, dans la frame d'apres détruire l'objet RB11 (autrement il va se voir dans toutes les frames et c'est pas du tout ce que je recherche).
 
Le probleme est que je n'arrive pas a le détruire. J'ai essayé:
RB11.destroyObject("RBtest" );
destroyObjet("RBtest" );
destroyObject(RB11);
...
bref plein de choses comme ca, rien n'y fait!
 
Le probleme ne vient pas de l'accessibilité de l'objet RB11 dans ma deuxieme frame puissque si je fais :
RB11._label = "coucou";
le label est effectivement changé.
 
Merci  :jap:  :jap: beaucoup par avance de votre aide.
 

Reply

Marsh Posté le 27-02-2006 à 11:26:46   

Reply

Marsh Posté le 27-02-2006 à 12:21:09    

[:sh@rdar]  

Citation :


L'exemple suivant supprime l'occurrence TextInput my_ti lorsque vous cliquez sur le bouton. Un composant Button et un composant TextInput étant dans la bibliothèque du document en cours, ajoutez le code suivant sur la première image du scénario principal :
 
// Création d'occurrences TextInput et Button.
this.createClassObject(mx.controls.TextInput, "my_ti", 1, {text:"Hello World"});
this.createClassObject(mx.controls.Button, "my_button", 2, {label:"My Button"});
// Déplacement du bouton sous la saisie de texte.
my_button.move(my_ti.left, Stage.height - my_ti.bottom);
 
// Création d'un objet écouteur pour le clic de bouton.
var buttonListener:Object = new Object();
buttonListener.click = function(evt_obj:Object){
    destroyObject("my_ti" );
}
// Ajout de l'écouteur.
my_button.addEventListener("click", buttonListener);  


source


---------------
D3
Reply

Marsh Posté le 27-02-2006 à 12:26:05    

oui je suis tout a fait d'accord avec ca. Sauf que bah ca marche pas dans mon exemple.
j'ai bien essayé destroyObject("RBtest" );
 
Rien n'y fait.
 
Si j'ai posté ici, c'est bien entendu apres avoir matté la doc, y compris le livedoc, et google ! (alors ton RTFM, bah heu hein ! Bon !)

Reply

Marsh Posté le 27-02-2006 à 12:38:17    

precision: comme ma premiere phrase n'est pas super claire, je m'explique un peu plus.
 
L'exemple marche, il detruit tout a fait le textInput. En revanche, impossible de détruire un RadioButton

Reply

Marsh Posté le 27-02-2006 à 12:45:20    

a mon avis (j'ai pas testé car les UI c'est le mal), tu as un PB avec ton instanciation d'objet car pour moi ca c'est un peu le bordel:

Code :
  1. RB11 = RadioButton(_level.createClassObject(RadioButton, "RBtest", _level.getNextHighestDepth()));
  2. RB11.data = "1";
  3. RB11._name = "RB11";
  4. RB11.label = this.r1;
  5. RB11.groupName = this.Qlabel;
  6. RB11.move(30, 130);


par rapport a ca:

Code :
  1. this.createClassObject(mx.controls.RadioButton, "RBtest", this.getNextHighestDepth(), {data:"1", _name:"RB11", label:this.r1, groupName:this.Qlabel, _x:30, _y:130});


 [:airforceone]  
 
après peut etre que:
delete RB11;
_level.destroyObject("RBtest" );  
ou
_level.RBtest.removeMovieClip();
pourront aider...
 
desole si je t'ai vexe mais bon on en voit des vertes et des pas murs...
 
EDIT: sinon tu triche:
 tu fait un RB11.move(hors champs) et puis tu delete RB11 pour liberer la mémoire...


Message édité par mechkurt le 27-02-2006 à 12:47:46

---------------
D3
Reply

Marsh Posté le 27-02-2006 à 12:46:39    

ouais excuse moi je me suis un peu enervé ! :p
Merci de ton aide.
Je vais essayer ta facon d'instancier l'objet, je post le feedback ici des que possible !:)

Reply

Marsh Posté le 27-02-2006 à 12:57:52    

j'ai donc changé l'instanciation d'objet. Cela ne change rien. J'ai essayer:
delete RB11;
_level.destroyObject("RBtest" );
_level.destroyObject(RB11);
_level.destroyObject(RB11._name);
_level.RBtest.removeMovieClip();
 
impossible de le supprimer.
 
Alors j'avais effectivement pensé à faire un move hors champs et un delete, mais je me suis dit que le delete n'aurait aucun effet parce qu'il ne supprime pas effectivement l'objet.
 
Peux tu confirmer s'il te plait qu'un delete libère la mémoire, meme si l'objet est encore visible a l'écran ?
Merci

Reply

Marsh Posté le 27-02-2006 à 13:44:05    

je sais pas essaye de faire ca:

Code :
  1. for (prop in RB11) {
  2.   trace(prop+"="+RB11[prop]);
  3. }
  4. delete RB11;
  5. for (prop in RB11) {
  6.   trace(prop+"="+RB11[prop]);
  7. }


et guette le panneau de sortie pour voir si il y a une difference entre avant et apres le delete...


---------------
D3
Reply

Marsh Posté le 27-02-2006 à 15:29:43    

le résultat est identique avant et apres le delete, hélas ....
En tous cas bonne idée le coup du prop je ne connaissais pas ! ;)
Autre chose ?? pliizzz :jap:

Reply

Marsh Posté le 27-02-2006 à 16:06:48    

Okay, le probleme vient de this.getNextHighestDepth();
Sans cette methode, l'objet est détruit correctement.
Il ne faut pas non plus que l'attribut _name soit renseigné !
Bon bah voila !
Merci beaucoup de ton aide, mechkurt.
 
Reste a savoir si c''est un comportement normal ou un bug ....

Reply

Marsh Posté le 27-02-2006 à 16:06:48   

Reply

Marsh Posté le 27-02-2006 à 19:24:56    

effectivement this.getnexthighestdepth() a des comportements douteux je prefere utiliser une variable que j'incremente, c'est apparu avec Player 7 ill me semble mais c'est maintenant (Flash 8) deprecié au profit de la classe depthmanager (que j'utilise pas non plus) ce qui prouve que c'étais bof comme truc...


---------------
D3
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed