gpt4 book ai didi

actionscript-3 - Flash AS3 - 将多个对象拖放到一个目标?

转载 作者:行者123 更新时间:2023-12-01 11:45:57 24 4
gpt4 key购买 nike

example of what I'm aiming for

标题或多或少是不言自明的,我一直在学习许多不同的教程,老实说,我对 AS3 并不是很熟悉。 (上图显示了我的目标)

无论如何,我在网上看到的大多数教程中注意到,拖放教程要么是基于一个对象到一个目标,要么是基于多个对象到多个目标,所以我想知道是否有人愿意帮助我并解释如何让多个对象连接到一个目标。

并且,如果可能的话,让它可以切换,例如,如果当我将对象 2 拖到目标上时对象 1 已经在目标上,那么对象 1 会返回到它的原始位置,而对象 2 会取代它。

一个更简单的解释方法是说我正在尝试创建一个游戏,其中有三个雕像,用户可以从三个雕像中选择一个放置在设定的目标区域中。

如果我说的话没有多大意义,我深表歉意,如果这引起了困惑,我会澄清任何事情。这是我目前使用的 AS3 代码。

var startX:int;
var startY:int;

circle1_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
circle1_mc.addEventListener(MouseEvent.MOUSE_UP, dropIt);
circle2_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
circle2_mc.addEventListener(MouseEvent.MOUSE_UP, dropIt);
circle3_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
circle3_mc.addEventListener(MouseEvent.MOUSE_UP, dropIt);

function pickUp(event:MouseEvent):void {
startX = event.target.x;
startY = event.target.y;
event.target.startDrag(true);
event.target.parent.addChild(event.target);

}

function dropIt(event:MouseEvent):void {
event.target.stopDrag();

var theTargetName:String = "target" + event.target.name;
var theTarget:DisplayObject = getChildByName(theTargetName);
if (event.target.dropTarget != null && event.target.dropTarget.parent == theTarget){
event.target.buttonMode = false;
event.target.x = theTarget.x;
event.target.y = theTarget.y;
}

else{

event.target.x = startX;
event.target.y = startY;

circle1_mc.buttonMode = true;
circle2_mc.buttonMode = true;
circle3_mc.buttonMode = true;

最佳答案

除了检查 dropTarget,您还可以使用 hitTestObject 来查看放置的对象是否“接触”theTarget。否则,任何其他已被放置到 theTarget 上的项目都可能被报告为 dropTarget。此外,由于 MovieClip 是动态的,您可以在每个实例中存储 startXstartY 值。

以下修改后的代码将使用单个 target_mc 作为放置目标。当一个项目落在上面时,任何其他项目将被移回原来的位置:

// create an array as @David suggested to keep track of your draggable items
var circles:Array = [circle1_mc, circle2_mc, circle3_mc];
for each(var circleMC:MovieClip in circles)
{
circleMC.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
circleMC.addEventListener(MouseEvent.MOUSE_UP, dropIt);
circleMC.startX = circleMC.x;
circleMC.startY = circleMC.y;
}

function pickUp(event:MouseEvent):void
{
// no longer need to keep track of startX & startY here because that's already been done up above
event.target.startDrag(true);
event.target.parent.addChild(event.target);

}

function dropIt(event:MouseEvent):void
{
event.target.stopDrag();
// check to see if the event target is touching target_mc using hitTestObject
if(event.target.hitTestObject(target_mc)){
event.target.buttonMode = false;
event.target.x = target_mc.x;
event.target.y = target_mc.y;
// move all circles OTHER than the current target back to their original positions
for each(var circleMC:MovieClip in circles)
{
if(event.target != circleMC)
{
circleMC.x = circleMC.startX;
circleMC.y = circleMC.startY;
}
}
}
else
{
// only need to move the event target back if it was dropped outside of target_mc
event.target.x = event.target.startX;
event.target.y = event.target.startY;
event.target.buttonMode = true;
}
}

关于actionscript-3 - Flash AS3 - 将多个对象拖放到一个目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15359919/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com