2013-04-24 89 views
0
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); 

.......對球跑動一些代碼.......碰撞無法正常工作AS3

function destroy(e:Event):void 
      { 

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

當球與磚碰撞,只有最後一個磚刪除。但如果球與磚塊相撞,我想單獨移除所有的磚塊。

回答

0

這裏brick只是指單個對象。將所有磚塊添加到數組中,然後在您的銷燬函數中循環使用它們。

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