2016-11-29 1 views
0

D'après ce que m'a dit mon ami, cela devrait fonctionner, mais ce n'est pas le cas.Utiliser les tableaux et hitTest - AS3

var P2hb:Array = new Array(P2char1, P2char2, P2char3); 
var P2life:Number = 0; 

addEventListener(Event.ENTER_FRAME, framecheck) 
function framecheck(event:Event):void 
{ 
if (P2hb.hitTestObject(P1attack)) { P2life-=2; } 
} 

Ceci est un code générique mais c'est pareil que ce que j'ai. Fondamentalement, tous les éléments dans le P2hb sont movieclips sur la scène. Je veux dire que, si P1attack touche l'un des objets du tableau, alors P2life diminuera de 2, sans avoir à taper hitTestObject() pour chaque objet individuel.
Je n'arrive pas à le faire fonctionner. Quelqu'un peut-il me dire ce que je fais mal?
Merci d'avance.

+0

Le '' P2hb' est un Array' dans lequel il n'y a pas de méthode 'hitTestObject()'! Vous vouliez probablement dire quelque chose comme: 'P2hb [0] .hitTestObject (P1attack)' pour les critères de l'instruction 'if'! – someOne

+0

... et que voulez-vous faire ?! – someOne

+0

comment obtenir [0] pour égaler tous les trois objets? – Koden

Répondre

1

Simplement, boucle à travers chaque individu « movieClip » dans le tableau (en utilisant une boucle for, par exemple) et vérifier la collision contre votre autre objet:

function framecheck(event:Event):void 
{ 
    for each (var enemy in P2hb) { 
     if (enemy.hitTestObject(P1attack)) { 
      P2life-=2; 
      trace("hit occurred! P2life: "+P2life); 
     } 
    } 
} 
+0

cela vérifiera-t-il tous les clips dans la même image? ou vérifiez chaque clip image par image? je voudrais le faire vérifier tous les clips dans une seule image – Koden

+0

J'ai essayé le code et il se déclenche seulement sur le deuxième élément dans le tableau – Koden

+0

@Koden Depuis, vous avez enregistré la fonction 'framecheck()' comme gestionnaire 'ENTER_FRAME' , alors _all_ le code à l'intérieur de la fonction sera exécuté _once_ tandis que la "tête de lecture" entre dans _each frame_ :) – someOne