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 に答える