Actionscript 3.0 MovieClip тест за попадение

Имам MovieClip. Представлява анимация на скачащо чудовище. За яснота нека се преструваме, че има само 2 кадъра: първият заема горния ляв правоъгълник (x = 0, y = 0, w = 70, h = 70), а вторият заема (x = 100, y = 0, w = 70, h = 70). Така чудовището скача отляво надясно. И позицията на самия MovieClip е постоянно = (0, 0). Бих искал да задействам някакво събитие, когато върху чудовището се щракне с мишката.

По някаква причина имам слушател на сценична мишка, а не слушател на чудовищна мишка. Написах този код:

stage.addEventListener(MouseEvent.CLICK, onClick);

private final function onClick(e:MouseEvent):void
{
    const clickPos:Point = new Point(e.stageX, e.stageY);
    // having monster:MovieClip, how do I check hitting it?
    // code below doesn't work
    // const r:Rect = new Rectangle(monster.x, monster.y,
    //                              monster.width, monster.height);
    // const hitTest:Boolean = r.containsPoint(stagePoint);
    // because r is always (0,0,70,70)
}

person Nick    schedule 25.10.2011    source източник


Отговори (1)


Вместо stage.addEventListener, приложете този слушател към вашия monster:MovieClip, за да извикате вашия манипулатор onClick, когато върху чудовището се щракне с мишката.

monster.addEventListener(MouseEvent.CLICK, onClick);

Можете да тествате удари вашето чудовище срещу точка, преминавайки в координати x и y. Има трети параметър на "shapeFlag" за проверка спрямо действителните пиксели на обекта (true) или ограничителната кутия (false).

monster.hitTestPoint(x, y, true);

Или тествайте удар срещу друг дисплейен обект

monster.hitTestObject(obj);
person Jason Sturges    schedule 25.10.2011
comment
Упс, изглеждаше малко по-сложно. Третият аргумент на hitTestPoint (shapeFlag) работи правилно само за векторни графики. Но рамките на моето чудовище са растерни. В резултат на това hitTestPoint се задейства дори ако щракна върху прозрачен пиксел на моето чудовище. Как мога да го реша? - person Nick; 26.10.2011