Je suis confronté à ce problème depuis un certain temps. J'ai une jolie petite infobulle movieclip qui suit la souris de l'utilisateur pendant quelques secondes avant de s'effacer. Mon problème est que s'il y en a déjà une, je la supprime, mais je n'arrive pas à supprimer l'événement MOTION_FINISH, qui continue de se déclencher et supprime éventuellement une nouvelle infobulle.
Ce que je veux, c'est essentiellement mettre un élément de ligne tel que var tween(smallhelp_panel).deleteAll() ; J'ai vu une fonction tweenlight killtweensof(mc) ; Cependant, j'ai utilisé les tweens que j'ai incorporés ci-dessous tout au long de mes 30k lignes de code AS3.
Voici mon gestionnaire d'infobulles. Je l'appelle avec un simple
Main_Warning("Please don't forget to save!",5);
Mon movieclip est un 'smallhelp_panel' et je vérifie s'il existe déjà et le supprime. Cependant, les tweens alpha et MOTION_FINISH existent toujours et causent des problèmes avec tout nouveau "smallhelp_panel".
public function Main_Warning( the_text:String, myTimer:int = 4){
if(smallhelp_panel != null){
stage.removeChild( smallhelp_panel );
removeEventListener(Event.ENTER_FRAME, trackmouse);
smallhelp_panel = null;
}
smallhelp_panel = new small_help();
smallhelp_panel.name = "myWarning";
smallhelp_panel.x = mouseX - 50;
smallhelp_panel.y = mouseY + 15;
smallhelp_panel.helptext.text = the_text;
stage.addChild( smallhelp_panel );
addEventListener(Event.ENTER_FRAME, trackmouse);
var myTween:Tween;
myTween = new Tween(smallhelp_panel, "alpha", None.easeOut, 1, 0, myTimer, true);
tweenholder = myTween;
tweenArray.push(tweenholder);
myTween.addEventListener(TweenEvent.MOTION_FINISH, removeTween);
}
Il s'agit de mon gestionnaire d'infobulles.
à titre de référence, mon produit d'élimination des préadolescents est le suivant :
public function removeTween(e:TweenEvent = null):void{
e.target.removeEventListener(TweenEvent.MOTION_FINISH, removeTween);
if(smallhelp_panel != null){
removeEventListener(Event.ENTER_FRAME, trackmouse);
stage.removeChild( smallhelp_panel );
smallhelp_panel = null;
}
}
et mon traqueur de souris qui déplace l'infobulle avec la souris est simple :
public function trackmouse(e:Event):void{
smallhelp_panel.x = mouseX - 50;
smallhelp_panel.y = mouseY + 15;
}