Как использовать мувиклип в качестве границы для другого перетаскиваемого объекта в AS3? - PullRequest
1 голос
/ 05 апреля 2019

Как использовать мувиклип в качестве границы для другого перетаскиваемого объекта?

Все, что я знаю, мы можем использовать прямоугольник для границы при начальном перетаскивании.

dragable_mc.addEventListener(MouseEvent.MOUSE_DOWN, start_drag);
function start_drag(e:MouseEvent)
{
    var rect:Rectangle = new Rectangle(0,0,100,100);
    dragable_mc.startDrag(false, rect);
}

Как перетащить мувиклип в другой мувиклип во флэш-памяти as3? (как показано на рисунке) enter image description here

1 Ответ

2 голосов
/ 05 апреля 2019

Если это динамическая фигура, вы должны записывать координаты x, y перетаскиваемого объекта каждый кадр при перетаскивании.Затем выполните проверку растровых точек с границей, чтобы проверить, находится ли объект вне границ.Если он находится снаружи, вернитесь к последним координатам, которые не выходят за пределы.

edit :

Переменные, которые необходимо переименовать, это dragTarget и bound_mc

dragTarget - это ваш dragable_mc

bound_mc - это название мувиклипа вашей границы.

bound_mc должен быть в формате png, и область вне границ ДОЛЖНА быть прозрачной.пример: Example

import flash.geom.Point;
import flash.geom.Rectangle;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.display.BitmapData;

stop();

var bmd:BitmapData =new BitmapData(600, 400, true, 0x000000);
var rect:Rectangle;
var lastPt:Point = new Point();

function init():void {
    rect = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight);
    setUpBitmap();
}

function setUpBitmap():void {
    bmd.draw(bound_mc);

    dragTarget.addEventListener(MouseEvent.MOUSE_DOWN, start_drag);
}

function start_drag(event:MouseEvent):void {
    dragTarget.removeEventListener(MouseEvent.MOUSE_DOWN, start_drag);
    stage.addEventListener(MouseEvent.MOUSE_UP, stop_drag);

    lastPt.x = dragTarget.x;
    lastPt.y = dragTarget.y;

    dragTarget.startDrag(false, rect);
    this.addEventListener(Event.ENTER_FRAME, logPoint);
}

function stop_drag(event:MouseEvent):void {
    this.removeEventListener(Event.ENTER_FRAME, logPoint);
    stage.removeEventListener(MouseEvent.MOUSE_UP, stop_drag);
    dragTarget.addEventListener(MouseEvent.MOUSE_DOWN, start_drag);

    dragTarget.stopDrag();
}

function logPoint(event:Event):void {
    var curPoint:Point = new Point(stage.mouseX, stage.mouseY);

    if ( bmd.hitTest(new Point( bound_mc.x, bound_mc.y ), 0, curPoint) ) {
        lastPt = curPoint;
    } else {
        dragTarget.x = lastPt.x;
        dragTarget.y = lastPt.y;

        stage.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_UP));
    }
}

init();
...