Как заставить функцию обнаружения попаданий работать во Flash?

Айвс перепробовал много способов обнаружения попаданий, и ни один из них не работает для меня. Я пробовал hittest hittestobject hitarea. Когда мой объект (который является клипом a или b, полностью переходит в клип c, я хочу, чтобы c перемещался в 300-кратном направлении. Не нужно точно определять точку, пока он находится в клипе c, он работает.

package  {

import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.media.Sound;
import flash.ui.Mouse;

public class bakingCake extends MovieClip {


    public function bakingCake() {
        // constructor code

        var object:MovieClip = new MovieClip;

        a.addEventListener(MouseEvent.MOUSE_DOWN,objectA);
        b.addEventListener(MouseEvent.MOUSE_DOWN,objectB);

        if (object.hitArea(c) == true)
        {
                c.x = 300;
        }           

        function objectA():void
        {           
            object = a;             
            object.addEventListener(MouseEvent.MOUSE_OVER,objectFun);
        }

        function objectB():void
        {
            object = b;
            object.addEventListener(MouseEvent.MOUSE_OVER,objectFun);
        }       


        function objectFun(event:MouseEvent):void
        {

            object.addEventListener(MouseEvent.MOUSE_DOWN,drag);
            object.addEventListener(MouseEvent.MOUSE_UP,sDrag);
        }
        function drag(event:MouseEvent):void
        {
            object.startDrag();
        }
        function sDrag(event:MouseEvent):void
        {
            object.stopDrag();

        }

    }
}

}


person Liam Thomas    schedule 16.11.2012    source источник
comment
Прежде всего: все это в функции конструктора или это просто ошибка копирования? Что такое c? Что вызывает функцию hitArea? Где называются objectA() или objectB()?   -  person Rengers    schedule 17.11.2012


Ответы (1)


Вы пробовали getBounds() ?
Я предлагаю условие:

if (c.getBounds(c.parent).containsRect(a.getBounds(c.parent))
 || c.getBounds(c.parent).containsRect(b.getBounds(c.parent))) {
    c.x = 300;
}

IMO лучший способ - проверить, что он инициируется событием ENTER_FRAME, прикрепленным к любому объекту.

person Saram    schedule 16.11.2012
comment
Вопрос решен, используется stage.addEventListener(Event.ENTER_FRAME, applicationloop); постоянно проверять столкновение - person Liam Thomas; 17.11.2012