0

我正在尝试一次将同一影片剪辑的多个副本添加到舞台

我有一个循环填充数组并在舞台上生成影片剪辑

和循环添加每个movieClip的click EventListener

但我错过了单独访问每个 MovieClip 以通过单击将其从舞台上删除的神奇代码

var numOfClips:Number = 5;
var mcArray:Array = new Array();

for(var i=0; i<numOfClips; i++)
{
    var usd:mcUSD = new mcUSD();

//genrate random x , y position----------------------------
    var randY:Number = Math.floor(Math.random()*460) + 120;
    var randX:Number = Math.floor(Math.random()*350) + 60; 
    usd.x = randX;
    usd.y = randY;  
//---------------------------------------------------------
    mcArray.push(usd);
    addChild(usd);
}

for(var m:int = 0; m<mcArray.length; m++){
    usd.addEventListener(MouseEvent.CLICK, colectmoney);
}

function colectmoney(e:MouseEvent): void { 
     removeChild(usd);
}
4

1 回答 1

0

尝试这个:

import flash.events.MouseEvent;

var numOfClips:Number = 5;
var mcArray:Array = new Array();

for(var i=0; i<numOfClips; i++)
{
var usd:mcUSD = new mcUSD();

//genrate random x , y position----------------------------
var randY:Number = Math.floor(Math.random()*460) + 120;
var randX:Number = Math.floor(Math.random()*350) + 60; 
usd.x = randX;
usd.y = randY;  
//---------------------------------------------------------
mcArray.push(usd);
addChild(usd);
}

addEventListener(MouseEvent.CLICK, mouseClickHandler);

function mouseClickHandler(e:MouseEvent) : void {
removeChild(mcArray[mcArray.indexOf(e.target)]);
}

需要注意的重要事项: 1) 您不需要为每个 mcUSD 对象调用 mouse.click 事件侦听器。调用一次效率更高。2) removeChild(usd) 不起作用,因为您需要告诉 AS3 要删除哪个 mcUSD 对象。3) 尽量保持函数命名法的一致性——例如用colectMoney 代替colectmoney。一旦您的程序变得更大,它将为您节省混乱的时间。希望这可以帮助!:)

于 2013-09-06T20:20:48.173 回答