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