Как использовать мувиклип в качестве границы для другого перетаскиваемого объекта?
Все, что я знаю, это то, что мы можем использовать прямоугольник для границы в начале перетаскивания.
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);
}
Как перетащить мувиклип в другой мувиклип во flash с помощью as3?
(как я показал на картинке)






Если это динамическая форма, вам придется регистрировать координаты x, y перетаскиваемого объекта в каждом кадре при перетаскивании. Затем выполните проверку битовой карты с границей, чтобы проверить, не выходит ли объект за границы. Если он снаружи, вернитесь к последним координатам, которые не выходят за пределы.
редактировать:
Вам нужно переименовать две переменные: dragTarget иbound_mc.
dragTarget — это ваш dragable_mc
bound_mc — это имя мувиклипа вашей границы.
bound_mc должен быть в формате png, а область вне границ ДОЛЖНА быть прозрачной. пример: 
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();
bitmapdata.hittest, а не hittestobject. Я посмотрю, напишу ли я пример позже. help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/…
ой извините, позвольте мне попробовать еще раз ;)
@XFa Я обновил свой пост кодами. пробовал и тестировал
@ user1234567, спасибо ... сработало очень хорошо :). важным моментом является то, что мы должны установить точку регистрации bound_mc в верхний левый угол.
@VC.Один да, очень хорошо.
Я пробую вашу идею, и я должен сказать, что она не работает, hitTestObject использует прямоугольник вокруг моей границы, чтобы проверить попадание.