Обнаружение столкновений между мувиклипом на временной шкале и нарисованным в ActionScript - PullRequest
0 голосов
/ 19 января 2012

Я делаю программу, которая позволяет пользователю рисовать фигуры на экране с помощью мыши.Когда они закончили, они нажимают кнопку, чтобы закончить.Пользователю разрешено рисовать только на определенной области сцены, чтобы управлять этим на временной шкале. У меня есть фрагмент ролика, который занимает все пространство, на которое пользователь не может рисовать.

Когда пользователь нажимаетКнопка Я хочу, чтобы программа проверила, что форма, нарисованная пользователем, не касается скрепки.Я хочу, чтобы это делалось без учета границы фрагмента ролика, поэтому я не могу использовать hitTestObject ()

Вот что у меня есть:

//------------------------------DRAW SHAPE------------------------------
    private var shape:MovieClip = new MovieClip();

    public function startDraw(e:MouseEvent):void {
        shape.graphics.moveTo(mouseX, mouseY);
        shape.graphics.lineStyle(4, 0x000000, 0.8);

        stage.addEventListener(MouseEvent.MOUSE_MOVE, beginDraw);
    }

    public function beginDraw(e:MouseEvent):void {
        shape.graphics.lineTo(mouseX, mouseY);
    }

    public function stopDraw(e:MouseEvent):void {
        stage.removeEventListener(MouseEvent.MOUSE_MOVE, beginDraw);
    }
//--------------------------CHECK FOR COLLISION---------------------------
    public function bclick(e:MouseEvent):void {
        if(cd(mcOnTimeline, shape)){
            trace("HIT IT");
        }else{
            trace("DIDNT HIT");
        }
    }
    public function cd(mc1:MovieClip, mc2:MovieClip):Boolean{
        var mc1Bounds:Object = mc1.getBounds(mc1);
        var mc2Bounds:Object = mc2.getBounds(mc1);
        //return(mc1Bounds.intersects(mc2Bounds));

        var mc1BmpD = new BitmapData(mc1Bounds.width, mc1Bounds.height, true, 0);
        var mc2BmpD = new BitmapData(mc2Bounds.width, mc2Bounds.height, true, 0);
        //mc1BmpD.draw(mc1Bounds);
        //mc2BmpD.draw(mc2Bounds);
        //return(mc1BmpD.intersects(mc2BmpD));

        if(mc1BmpD.hitTest(new Point(mc1Bounds.x, mc1Bounds.y), 255, mc2BmpD, new Point(mc2Bounds.x, mc2Bounds.y),255)){
            return true;
        }
        else{
            return false;
        }

Закомментированный материал отличаетсявещи, которые я пытался заставить это работать

Ответы [ 2 ]

1 голос
/ 19 января 2012

В зависимости от сложности вашей формы hitTest вы можете рассмотреть возможность использования BitmapData.hitTest (), которая должна быть более эффективной.Проверьте сообщение в блоге Майка Чемберса на эту тему .

1 голос
/ 19 января 2012

Я бы тестировал во время рисования;когда пользователь рисует (кнопка мыши нажата), проверьте, нажала ли мышь x, y на мувиклип.Если это так, установите соответствующий флаг.

...