2014-05-09 42 views
0

我有一个8个影片剪辑的数组,可以拖放到他们常见的hitObject的MC上。AS3:如何从基于e.target的MC数组中添加儿童?

我希望拖动哪个mc作为hitObject MC的子项被添加,但是我在设置代码时遇到了麻烦。目前,只有一个特定实例将作为hitObject的子项添加,因为除了特定实例名称外,我不知道要在addChild()参数内写入什么内容(以下都不是可接受的:e.target,数组名称,MovieClip名称)。

这里是我的代码--any和所有帮助将非常感激:

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; 
     } 
} 

提前感谢!

回答

0

你快到了。您想要通过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; 
     } 
} 
+0

谢谢,这正是我所需要的!我无法完全理解它。我在等待的时候踢过去,发现了另一个解决方案,尽管它不像这样干净。我很欣赏你提供的链接。干杯! – llyfre

0

您已通过事件目标属性访问已放置的对象。强制转换为一个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()被应用到 中。
+0

该代码不会编译。 –

+0

我修好了。现在它会;) – dxb

+1

这更好:) –