Flash AS3 拖动多个对象
Flash AS3 Dragging multiple objects
我正在寻找的是当我在舞台上拖动一个对象时,我想要一个底层对象(同一层)被拖动,并保持在放置主要对象的位置。我需要在多对象情况下使用数组吗?
这只是一个对象(和 'sub-object'),总共会有 22 个,我不能将子对象添加到它的动画片段中,否则舞台上的其他 21 个对象将重叠并且互相干扰。
这是我目前所拥有的,请参见插图。谁能告诉我一些可用的代码?
CF.addEventListener(MouseEvent.MOUSE_DOWN, dragCF);
CF.addEventListener(MouseEvent.MOUSE_OVER, fadeCF_spaceIN);
CF.addEventListener(MouseEvent.MOUSE_UP, fadeCF_spaceIN);
function dragCF(evt:MouseEvent):void {
addChild(MovieClip(evt.currentTarget));
evt.currentTarget.startDrag();
stage.addEventListener(MouseEvent.MOUSE_UP, dropCF); }
function dropCF(evt:MouseEvent):void {
stopDrag();
stage.removeEventListener(MouseEvent.MOUSE_UP, dropCF); }
function fadeCF_spaceIN(evt:MouseEvent):void {
CF_space.alpha = .5;
stage.addEventListener(MouseEvent.MOUSE_OUT, fadeCF_spaceOUT);
stage.addEventListener(MouseEvent.MOUSE_DOWN, fadeCF_spaceOUT); }
function fadeCF_spaceOUT(evt:MouseEvent):void {
CF_space.alpha = 0;
stage.removeEventListener(MouseEvent.MOUSE_OUT, fadeCF_spaceOUT); }
示例说明:
var CF_1:Array = [CF_mc, CF_space]; // instance names
for each(var CF1_MC:MovieClip in CF_1)
{
CF1_MC.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
CF1_MC.addEventListener(MouseEvent.MOUSE_UP, dropIt);
CF1_MC.startX = CF1_MC.x;
CF1_MC.startY = CF1_MC.y;
}
function pickUp(event:MouseEvent):void
{
event.target.startDrag(true);
event.target.parent.addChild(event.target);
}
function dropIt(event:MouseEvent):void
{
event.target.stopDrag();
}
不能 100% 确定您的意思,但是您可以使用 ENTER_FRAME 函数代替 startDrag 和 stopDrag 吗?这是一个非常小的示例,您也可以将其用于对象数组。
var xDifference:Number;
var yDifference:Number;
var dragging:Boolean;
draggableObject.addEventListener(MouseEvent.MOUSE_DOWN, mDown);
draggableObject.addEventListener(MouseEvent.MOUSE_UP, mUp);
stage.addEventListener(Event.ENTER_FRAME, loop);
function loop(evt:Event):void{
if(dragging){
draggableObject.x = mouseX;
draggableObject.y = mouseY;
secondaryObject.x = draggableObject.x + xDifference;
secondaryObject.y = draggableObject.y + yDifference;
}
}
function mDown(evt:MouseEvent):void{
xDifference = secondaryObject.x - draggableObject.x;
yDifference = secondaryObject.y - draggableObject.y;
dragging = true;
}
function mUp(evt:MouseEvent):void{
dragging = false;
}
根据具体情况,您可能还想计算鼠标光标和 draggableObject 在 MOUSE_DOWN 上的注册点之间的差异,以防止 draggableObject 跳转到其中心点恰好位于鼠标位置的位置。
感谢您的补充,事实证明更简单了,太简单了:
object.addEventListener(MouseEvent.MOUSE_DOWN, drag);
object.addEventListener(MouseEvent.MOUSE_UP, drop);
function drag(evt:MouseEvent):void {
addChild(MovieClip(evt.currentTarget));
evt.currentTarget.startDrag();
}
function drop(evt:MouseEvent):void {
stopDrag();
object_space.x = object.x;
object_space.y = object.y;
}
我正在寻找的是当我在舞台上拖动一个对象时,我想要一个底层对象(同一层)被拖动,并保持在放置主要对象的位置。我需要在多对象情况下使用数组吗? 这只是一个对象(和 'sub-object'),总共会有 22 个,我不能将子对象添加到它的动画片段中,否则舞台上的其他 21 个对象将重叠并且互相干扰。
这是我目前所拥有的,请参见插图。谁能告诉我一些可用的代码?
CF.addEventListener(MouseEvent.MOUSE_DOWN, dragCF);
CF.addEventListener(MouseEvent.MOUSE_OVER, fadeCF_spaceIN);
CF.addEventListener(MouseEvent.MOUSE_UP, fadeCF_spaceIN);
function dragCF(evt:MouseEvent):void {
addChild(MovieClip(evt.currentTarget));
evt.currentTarget.startDrag();
stage.addEventListener(MouseEvent.MOUSE_UP, dropCF); }
function dropCF(evt:MouseEvent):void {
stopDrag();
stage.removeEventListener(MouseEvent.MOUSE_UP, dropCF); }
function fadeCF_spaceIN(evt:MouseEvent):void {
CF_space.alpha = .5;
stage.addEventListener(MouseEvent.MOUSE_OUT, fadeCF_spaceOUT);
stage.addEventListener(MouseEvent.MOUSE_DOWN, fadeCF_spaceOUT); }
function fadeCF_spaceOUT(evt:MouseEvent):void {
CF_space.alpha = 0;
stage.removeEventListener(MouseEvent.MOUSE_OUT, fadeCF_spaceOUT); }
示例说明:
var CF_1:Array = [CF_mc, CF_space]; // instance names
for each(var CF1_MC:MovieClip in CF_1)
{
CF1_MC.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
CF1_MC.addEventListener(MouseEvent.MOUSE_UP, dropIt);
CF1_MC.startX = CF1_MC.x;
CF1_MC.startY = CF1_MC.y;
}
function pickUp(event:MouseEvent):void
{
event.target.startDrag(true);
event.target.parent.addChild(event.target);
}
function dropIt(event:MouseEvent):void
{
event.target.stopDrag();
}
不能 100% 确定您的意思,但是您可以使用 ENTER_FRAME 函数代替 startDrag 和 stopDrag 吗?这是一个非常小的示例,您也可以将其用于对象数组。
var xDifference:Number;
var yDifference:Number;
var dragging:Boolean;
draggableObject.addEventListener(MouseEvent.MOUSE_DOWN, mDown);
draggableObject.addEventListener(MouseEvent.MOUSE_UP, mUp);
stage.addEventListener(Event.ENTER_FRAME, loop);
function loop(evt:Event):void{
if(dragging){
draggableObject.x = mouseX;
draggableObject.y = mouseY;
secondaryObject.x = draggableObject.x + xDifference;
secondaryObject.y = draggableObject.y + yDifference;
}
}
function mDown(evt:MouseEvent):void{
xDifference = secondaryObject.x - draggableObject.x;
yDifference = secondaryObject.y - draggableObject.y;
dragging = true;
}
function mUp(evt:MouseEvent):void{
dragging = false;
}
根据具体情况,您可能还想计算鼠标光标和 draggableObject 在 MOUSE_DOWN 上的注册点之间的差异,以防止 draggableObject 跳转到其中心点恰好位于鼠标位置的位置。
感谢您的补充,事实证明更简单了,太简单了:
object.addEventListener(MouseEvent.MOUSE_DOWN, drag);
object.addEventListener(MouseEvent.MOUSE_UP, drop);
function drag(evt:MouseEvent):void {
addChild(MovieClip(evt.currentTarget));
evt.currentTarget.startDrag();
}
function drop(evt:MouseEvent):void {
stopDrag();
object_space.x = object.x;
object_space.y = object.y;
}