碰撞不能正常工作as3

时间:2013-04-24 06:25:08

标签: actionscript-3

var i:Number;

            for (i=0;i<6;i++)
            {

                var brick:Sprite=new Sprite();
                brick.graphics.beginFill(0x02589E);
                brick.graphics.drawRect(0,0,70,7);
                brick.graphics.endFill();
                brick.y=10;
                brick.x=12+(80*i);
                addChild(brick);

            }

addEventListener(Event.ENTER_FRAME,destroy);

            var ball:Sprite=new Sprite();
            ball.graphics.beginFill(0xff0000);
            ball.graphics.drawCircle(0,0,7);
            ball.graphics.endFill();
            ball.x=200;
            ball.y=230;
            addChild(ball);

.......球移动的一些代码.......

 function destroy(e:Event):void
            {

                 if(ball.hitTestObject(brick)){
                     removeChild(brick);
                 }
            }

当球与砖碰撞时,只有最后一块砖被移除。但是如果球与砖碰撞,我想分别拆除所有砖。

2 个答案:

答案 0 :(得分:2)

目前,brick指的是在for循环中创建的最后一个实例。您需要做的是将这些对象存储在一个数组中,遍历该数组,并检查该数组中每个砖块之间的碰撞。

它可能看起来像这样:

// Define the array.
var bricks:Array = [];

// Create bricks.
for(var i:int = 0; i < 6; i++)
{
    var brick:Sprite = new Sprite();

    brick.y = 10;
    brick.x = 12 + (80 * i);
    brick.graphics.beginFill(0x02589E);
    brick.graphics.drawRect(0, 0, 70, 7);
    brick.graphics.endFill();

    addChild(brick);
    bricks.push(brick);
}

然后你的碰撞检查代码:

function destroy(e:Event):void
{
    for each(var brick:Sprite in bricks)
    {
        if(ball.hitTestObject(brick))
        {
            removeChild(brick);
        }
    }
}

答案 1 :(得分:0)

此处brick仅指单个对象。将所有砖块添加到数组中,然后在destroy函数中循环遍历它们。