0

我有一个包含 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;
        }
}

提前致谢!

4

2 回答 2

0

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

这里target有一个很好的解释和之间的区别。currentTarget

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;
        }
}
于 2014-05-09T23:35:20.487 回答
0

您已经通过 event target 属性访问了放置的对象。将其转换为 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() 的对象。
于 2014-05-09T23:37:10.273 回答