Detection de la fin d'une fonction ?

Detection de la fin d'une fonction ? - Flash/ActionScript - Programmation

Marsh Posté le 13-07-2005 à 10:51:46    

Bonjour,
 
J'ai un souci avec les appels de fonction, flash continu le déroulement des instructions sans attendre la fin d'une fonction ...
 
 
J'ai une fonction qui dessine mes objets

Code :
  1. function Dessine(){
  2. for(i=0;i<5;i++){
  3.  _root.attachMovie("mon_objet", "obj_"+i, i);
  4.  trace("create obj_"+i);
  5. }
  6. }


 
 
Lorsque que j'execute Dessine, mes objets sont bien affiché.
 
 
J'ai une fonction Refresh pour redessiner mes objets :
 

Code :
  1. function Refresh(){
  2. for(i=0;i<5i++){
  3.  obj = this.getInstanceAtDepth(i);
  4.  obj.unloadMovie();
  5.  trace("remove "+obj);
  6. }
  7. Dessine();
  8. }


 
Sur mes objets j'ai une methode onUnload pour detruire mes objets

Code :
  1. class MonObjet{
  2. function onUnload(){
  3.  this.removeMovieClip();
  4.  trace("delete "+this);
  5. }
  6. }


 
Lorsque que j'exucute Refresh, j'ai en sortie :
 

remove obj_0
remove obj_1
remove obj_2
remove obj_3
remove obj_4
create obj_0
create obj_1
create obj_2
create obj_3
create obj_4
delete obj_0
delete obj_1
delete obj_2
delete obj_3
delete obj_4


 
Donc il créer des objet avec un nom qui existe deja avant de les effacer ... et je veux l'inverse, les effacer puis les recréer
 
Vous me direz que je peut faire directment obj.removeMovieClip() dans Refresh mais sa ne marche pas et je ne sais pas pourquoi....
 
Quelqu'un à une idée  :??:  
 
J'espere avoir été clair  :pt1cable:  
 
Merci
 
PS : Merci Mr Mala pour ta réponse sur l'odre des calques


Message édité par bozocarzu le 13-07-2005 à 10:54:12
Reply

Marsh Posté le 13-07-2005 à 10:51:46   

Reply

Marsh Posté le 13-07-2005 à 13:48:39    

Hello !!
 
dans refresh, y manque un point virgule dans la déclaration de la boucle for...
Puis comment tu lie ta classe à ton mc en bibliothèque, car j'ai quelques doutes sur la cohérence de tout ça. Si ta classe ne dérive pas de movieClip, et n'est pas attachée au symbole de la bibliothèque, tu ne pourras pas utiliser des méthodes tels que removeMovieClip().
 
On peut remarquer que c'est déjà très bizarre qu'il t'affiche les delete... si l'objet est supprimé, il ne va pas continuer à afficher des traces...
 
a+

Reply

Marsh Posté le 13-07-2005 à 14:10:14    

Hello,
 
Le code que j'ai tapé est un code de demo, j'ai oublié l'incrementation   :pt1cable:
 
La classe est une class externe avec un extends MovieClip. Cette class est liée à mon objet dans ma bibliothèque.
 
Le problème n'est pas là; c'est juste que flash execute la commande obj.unlaodMovie() et passe à la suite sans attendre un retour. Ce qui est explique pourquoi on vois le remove, puis le create, puis le delete....

Reply

Marsh Posté le 13-07-2005 à 14:35:11    

mais c'est pas très net... dans Refresh, tu fais "unloadMovie()". c'est une méthode de la classe MovieClip... quand est-ce que tu appelle "onUnload()" ?? c'est appelé automatiquement après le "unloadMovie" ?? je capte pas pourquoi tu fais un unloadMovie puis encore par dessus tu veux  exécuter ta méthode onUnload.
 
Sinon, c'est lié à ton objet de quel manière ?? tu as juste mis la liaison dans les propriétés, avec le nom de classe ?? c'est pas suffisant... tu dois nommer ton clip avec le mot Symbol derrière, par exemple "monClipSymbol", mettre le chemin de la classe dans "classe as2", et puis aller dans la définition du composant et rajouter également le chemin de classe... enfin, ta liaison est peut-être faite avec registerClass, j'ai pas trop l'habitude de ça...
 
M'enfin, je comprend pas trop ta logique, et je vois pas d'appel à onUnload...

Reply

Marsh Posté le 13-07-2005 à 16:13:36    

lol, j'ai du mal expliqué ....
 
Je fais appel à Refresh, qui fais appel à unloadMovie sur mes 5 premiers clip. Et lorsque que je fais appel à unloadMovie, la methode onUnload de mon objet se déclenche automatiquement.

Reply

Marsh Posté le 13-07-2005 à 16:45:17    

bof, à ta place, au lieu de mettre onUnload en gestionnaire dans le clip, je ferai directement dans la boucle :
 
obj.removeMovieClip();
delete obj;
 
et basta, ton objet n'existe plus... Je ne comprend pas trop à quoi te sert ton handler onUnload... on est pas en C, t'as pas besoin de faire un destructeur pour ton objet, un simple delete devrai suffire.
 
a+

Reply

Marsh Posté le 26-08-2005 à 15:06:24    

titouille a écrit :

bof, à ta place, au lieu de mettre onUnload en gestionnaire dans le clip, je ferai directement dans la boucle :
 
obj.removeMovieClip();
delete obj;
 
et basta, ton objet n'existe plus... Je ne comprend pas trop à quoi te sert ton handler onUnload... on est pas en C, t'as pas besoin de faire un destructeur pour ton objet, un simple delete devrai suffire.
 
a+


 
Ta commande delete obj n'est pas executer. Aparement, la fonction obj.reloveMovieClip() arrete l'execution du clip..
 
Quand j'ai fais mes test, sa ne marchais pas :
 

Code :
  1. obj.removeMovieClip();
  2. trace("test" );


 
test n'apparaissait jamais dans la sortie.....
 

Reply

Sujets relatifs:

Leave a Replay

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