AS3 - removeChild() supprime tous les éléments de la scène
Je suis en train de travailler sur un jeu Flash simple pour l'école. Dans un niveau, plusieurs ennemis spawn et le joueur est censé tirer sur eux. J'ai utilisé la méthode removeChild() pour se débarrasser de l'ennemi qui l'a abattu, mais quand je clique sur (touche) un ennemi, tout sur ma scène est supprimé; il va complètement vide.
La fonction à remplir ma scène avec des ennemis est la suivante:
private function Game2():void{
for (var i:uint=0; i<50; i++) {
var man:MovieClip = new man_mc();
man.x=Math.random()*750;
man.y=Math.floor(Math.random()*(70))+350;
addChild(man);
man.addEventListener(MouseEvent.CLICK, getroffen);
}
fonction "getroffen' vérifie si un ennemi a été touché:
public function getroffen(evt:MouseEvent):void{
trace("hit");
this.parent.removeChild(this);
}
Sorte de confusion ici pourquoi il supprime tout sur la scène au lieu de supprimer simplement l'ennemi que je clique sur. Toute aide? Merci beaucoup.
Vous devez vous connecter pour publier un commentaire.
selon l'endroit où
getroffen()
est, vous êtes à la suppression de classe (this
points du champ d'application actuel de l'objet), donc je suppose que c'est probablement laMain
classe.Vous avez besoin de faire quelque chose de semblable dans votre fonction de suppression:
currentTarget
param (probablement le meilleur) au lieu de latarget
param. La différence vient de la façon dont l'événement est un modèle qui fonctionne et qui vous inscrire à l'écouteur d'événement sur. Tout ce que je suis en train de faire est de jeter la cible d'unMovieClip
(vous pouvez ajouter une vérification pour voir si elle est null, alors le retour si vous le souhaitez), puis en appelant sur elleparent
pour l'enlever. Lorsque vous ajoutez unDisplayObject
à un autre, il devient un enfant de cet objet et de saparent
param set. Ce faisant,obj.parent.removeChild( obj )
est un moyen facile de le supprimertarget
etcurrentTarget
différence, laEvent
modèle flash en 3 étapes: la phase de capture, de la phase d'événement, et la phase de propagation. Quand un objet dans la liste d'affichage distribue un événement, il vaStage->parent->parent->parent->child
oùchild
est l'objet qui a distribué l'événement etparent
chaque parentDisplayObject
tout le chemin jusqu'à lastage
. Jusqu'à la dernièreparent
nous sommes dans la phase de capture. Lorsque nous atteignons lechild
, nous sommes dans la phase d'événement. Après cela, l'événement bulles remonter à laStage
de nouveau. C'est la phase de propagationtarget
etcurrentTarget
,target
est l'objet qui a distribué l'Événement, tandis quecurrentTarget
est l'objet courant dans laStage->parent->parent->child->parent->parent->Stage
événement de l'itinéraire.Stage->Sprite->Sprite
où le dernier sprite a certains graphiques. Ajouter des écouteurs d'événement pour tous les objets de quelque chose commeMouseEvent.CLICK
(c'est à dire à la scène, la mère de sprite, et le sprite avec les graphiques). Assurez-vous et ajouter pour les deux phases (lauseCapture
bool). Dans chaque fonction d'écouteur, tracer latarget
, lecurrentTarget
et laeventPhase
. Vous verrez l'ordre des choses a appelé, et il est beaucoup plus facile à comprendre que la lecture de ces commentaires 😀Au lieu de
this.parent.removeChild(this)
essayer:Qui devrait faire l'affaire!
L'événement (mouseEvent) est un "enfant" de l'un de vos ennemis, de sorte que la suppression de la cible de votre mouseEvent va supprimer l'ennemi.