2017-03-25 6 views
1

Je peux écrire un déclencheur hitTestPoint en tant que telle.hitTestPoint frapper des points de test multiples (AS3)

if (mc1.hitTestPoint(mc2.x, mc2.y, true)) 

et si je veux avoir des points de test multiples que je peux écrire quelque chose comme

if (mc1.hitTestPoint(mc2.x, mc2.y, true) || mc1.hitTestPoint(mc2.x-5, mc2.y, true) || mc1.hitTestPoint(mc2.x+5, mc2.y, true)) 

Je suis Je me demande cependant s'il y a de toute façon à définir plusieurs repères dans la même déclaration. J'ai essayé quelque chose comme ça avec pas de chance ...

if (mc1.hitTestPoint((mc2.x, mc2.y, true) || (mc2.x, mc2.y, true))) 

ou

if (mc1.hitTestPoint((mc2.x+5 || mc2.x-5), mc2.y, true)) 

... et bien d'autres, mais rien ne semble fonctionner. C'est une douleur d'écrire les nouveaux points pour le même objet encore et encore surtout quand vous avez 20 points de vie que vous devez vérifier. Est-il possible d'ajouter plusieurs points dans une déclaration?

Répondre

2

Vous semblez confondre la programmation et la sorcellerie. DisplayObject.hitTestPoint accepte 2 à 3 arguments de types désignés (Number, Number, [optionnel Boolean]) dans cet ordre désigné, et rien d'autre.

((mc2.x, mc2.y, true) || (mc2.x, mc2.y, vrai)) = seul argument booléen

((mc2.x + 5 || mc2 .x-5), mc2.y, true) = (Boolean, Number, Boolean)

Ainsi, vous vous interessez un point à la fois. Pour en tester 20, vous devez parcourir un tableau de points. Par exemple:

var Foo:Array = 
[ 
    mc2.x, mc2.y, 
    mc2.x+5, mc2.y, 
    mc2.x-5, mc2.y 
]; 

// Hit test pairs of elements as (x,y) coordinates. 
for (var i:int = 0; i < Foo.length; i += 2) 
{ 
    var aHit:Boolean = mc1.hitTestPoint(Foo[i], Foo[i+1]); 

    if (aHit) 
    { 
     trace("Hit!", Foo[i], Foo[i+1]); 
    } 
    else 
    { 
     trace("Miss!", Foo[i], Foo[i+1]); 
    } 
}