【问题标题】:AS3: how to addChild from an array of MC's based on e.target?AS3:如何从基于 e.target 的 MC 数组中添加子项?
【发布时间】:2014-05-10 17:09:20
【问题描述】:

我有一个包含 8 个影片剪辑的数组,可以将它们拖放到一个 MC 上,这是它们共同的 hitObject。

我希望将拖动的任何一个 mc 添加为 hitObject MC 的子级,但我在设置代码时遇到了麻烦。目前,只有一个特定实例将添加为 hitObject 的子对象,因为除了特定实例名称之外,我不知道在 addChild() 参数中要写什么(以下均不可接受:e.target,数组名称,影片剪辑名称)。

这是我的代码 -- 任何和所有帮助将不胜感激:

import flash.events.MouseEvent;
import flash.display.MovieClip;

var redArray:Array = [red,red1,red2,red3,red4,red5,red6,red7];

redArray.forEach(setupDrag);
function setupDrag(dragger:MovieClip, index:int, array:Array):void {
    dragger.addEventListener(MouseEvent.MOUSE_DOWN, dragRed);
    dragger.buttonMode=true;}

redArray.forEach(setupDrop);
function setupDrop(dropper:MovieClip, index:int, array:Array):void {
    dropper.addEventListener(MouseEvent.MOUSE_UP, dropRed);
    dropper.buttonMode=true;}

var dirt:MovieClip

function dragRed(e:Event):void{
        dirt = e.currentTarget as MovieClip;
        e.target.startDrag();
}

function dropRed(e:Event):void{
        e.target.stopDrag();
        if (e.target.hitTestObject(drawer_mc))
        {
        drawer_mc.addChild(red1);
        red1.y=10;
        }
}

提前致谢!

【问题讨论】:

    标签: arrays actionscript-3 drag-and-drop addchild targets


    【解决方案1】:

    你快到了。您想将targetcurrentTarget 作为参数传递给addChild。我认为以下应该做到这一点(我刚刚发布了我更新的位)。

    还有一个很好的解释targetcurrentTargethere之间的区别。

    var dirt:MovieClip;
    
    function dragRed(e:Event):void {
            // sounds like currentTarget and target will both work in your
            // case, but stick to one or the other for consistency
            dirt = e.currentTarget as MovieClip;
            dirt.startDrag();
    }
    
    function dropRed(e:Event):void{
            // assigning the currentTarget to your dirt variable means you don't 
            // keep needing to refer to e.currentTarget throughout the function
            dirt = e.currentTarget as MovieClip;
            dirt.stopDrag();
            if (dirt.hitTestObject(drawer_mc)) {
                // now you're always adding the instance that triggered 
                // the mouse up event
                drawer_mc.addChild(dirt);
                dirt.y=10;
            }
    }
    

    【讨论】:

    • 谢谢,这正是我所需要的!我只是无法完全围绕它。我在等待的时候四处奔走,找到了另一个解决方案,虽然它不像这个那么干净。我也很欣赏您提供的链接。干杯!
    【解决方案2】:

    您已经通过事件目标属性访问了拖放的对象。将其转换为 DisplayObject 或 MovieClip,然后在 addChild() 方法中传递:

    function dropRed(e:Event):void
    {
      var droppedObject:MovieClip = e.currentTarget as MovieClip;
      droppedObject.stopDrag();
    
      if(droppedObject.hitTestObject(drawer_mc))
      {
        drawer_mc.addChild(droppedObject);
        droppedObject.y=10;
      }
    }
    
    • e.target 指的是被点击的对象。
    • e.currentTarget 是指对象 addEventListener() 被应用 到。

    【讨论】:

    • 我修好了。现在它会;)
    • 谢谢,非常感谢。我只是不太清楚如何使用该变量,但 e.currentTarget 做得很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 2015-03-19
    相关资源
    最近更新 更多