0

我对AS3相当陌生。无论如何,我尝试在单击时删除动态创建的子影片剪辑。当点击一个污垢块时,这是一个“世界”的子影片剪辑,我想将其删除。

我尝试了各种使用 removeChild 删除它的方法。我还尝试将函数移动到创建影片剪辑的 for 循环的内部/外部。

var blockCount:Number = 0;
var blockArray:Array = [];

var world:MovieClip = new World();
world.x = 50;
world.y = 50;
world.name = "world";
addChild(world);

for(var i:Number=1;i<=100;i++){
    blockCount++;
    var tempGrassBlock:MovieClip = new GrassBlock();
    tempGrassBlock.x = i*16;
    tempGrassBlock.y = 256;
    tempGrassBlock.name = "b"+blockCount;
    world.addChild(tempGrassBlock);

    tempGrassBlock.addEventListener(MouseEvent.CLICK, removeBlock);
    function removeBlock(event:Event){
        world.removeChild(getChildByName(event.target.name));
    }
}

谢谢您的帮助。

4

2 回答 2

1

试试这个

function removeBlock(event:Event){
    world.removeChild(event.currentTarget as DisplayObject);
}
于 2012-05-17T23:23:38.600 回答
1

任何函数定义都不应该在 for 中。我在你的代码中改变了它,并在下面重写了一点:

var blockCount:Number = 0;
var blockArray:Array = [];

var world:MovieClip = new World();
world.x = 50;
world.y = 50;
world.name = "world";
addChild(world);

for(var i:Number=1;i<=100;i++){
    blockCount++;
    var tempGrassBlock:MovieClip = new GrassBlock();
    tempGrassBlock.x = i*16;
    tempGrassBlock.y = 256;
    tempGrassBlock.name = "b"+blockCount;
    world.addChild(tempGrassBlock);

    tempGrassBlock.addEventListener(MouseEvent.CLICK, removeBlock);

}

function removeBlock(event:MouseEvent){
    trace("Is click really working? This target name is " + event.currentTarget.name);
    world.removeChild(event.currentTarget));
}
于 2012-05-18T00:36:20.923 回答