簡體   English   中英

碰撞不能正常工作as3

[英]Collision is not working properly as3

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

當球與磚碰撞時,只有最后一塊磚被移除。但是如果球與磚碰撞,我想分別拆除所有磚。

目前, 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);
        }
    }
}

這里brick僅指單個對象。 將所有磚塊添加到數組中,然后在destroy函數中循環遍歷它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM