2012-02-18 68 views
0

我正在製作塔防遊戲,並且已經達到了我的塔以適當間隔發射子彈的程度。但我需要能夠刪除影片剪輯。例如,如果一座塔子射出一顆子彈,它會製作一個子彈動畫片段的副本,這個副本旨在複製特定的敵人。但是,我無法弄清楚如何配置hitTest。有沒有什麼辦法可以讓hittest檢查從特定對象複製的所有兒童影片剪輯?如何擊中所有動畫片段的實例 - ACTIONSCRIPT 2

編輯:我添加了這個功能,每秒執行一次。但由於某種原因,它不能確認命中。

function checkHits(){//checks for hits between enemies and bullets 
for (var zz = 0; zz < bulletArray.length; zz += 1)//checks for each bullet 
{ 
    for(var yy=0;yy<enemiesArray.length;yy+=1){//checks for each enemy 
     trace("enemies loc"+yy+":"+enemiesArray[yy]); 
     trace("bullet loc"+zz+":"+bulletArray[zz]); 
     if(bulletArray[zz].hitTest(enemiesArray[yy])){ 
      trace("HIT!"); 
      removeMovieClip(bulletArray[zz]); 
      removeMovieClip(enemiesArray[yy]); 
      bulletArray.splice(zz,1); 
      bulletArray.splice(yy,1); 
      }//end if 
    }//end for 
}//end for 

}

function dupeCircle() 
{ 
//trace("Dupe circle initiated"); 
duplicateMovieClip(circlebase, "_root.circle" + circleCount, circleCount); 
bulletArray.push("circle" + circleCount); 
trace(bulletArray[0]._width); 
circleCount += 1; 
} 

這是它增加了圓圈的對象的代碼。

回答

0

您可以保留一個包含所有想要測試的影片剪輯的數組,然後遍歷該數組並檢查每個影片剪輯。所以,無論何時將其添加到屏幕上,都將其添加到該數組中。然後,當你想測試時,測試該陣列中的每個人。如果要刪除它,請將其從陣列和屏幕中刪除。

編輯

以下是我認爲在這種情況下做的......

function dupeCircle() 
{  
    //trace("Dupe circle initiated"); 
    bulletArray.push(duplicateMovieClip(circlebase, "_root.circle" + circleCount, circleCount)); 
    circleCount += 1; 
} 

基本上只是存儲陣列中的實際影片剪輯,然後你可以做你試圖去做bulletArray[index].hitTest,它應該有希望工作。 (做同樣的事情,你存儲實際的影片剪輯爲其他陣列也)

+0

我想到了,但我該如何管理何時檢查它?如果我在屏幕上有30個敵人和30發子彈,每個實例是否應該不斷檢查?或者更好的方法是爲每個子彈和每個敵人都堆疊一個「每個」陣列,這個陣列貫穿所有陣列;並且每秒都有一次檢查? – Nick 2012-02-18 15:51:47

+0

那麼有很多不同的方法可以用來檢查。做一個遊戲時我喜歡做的一件事就是創建一個「主循環」,因爲我習慣於C++並且總是有一個主循環。我不知道這是否是在Flash中最好的方式,但我這樣做並沒有任何問題。我認爲計時器是實現這個循環的好方法。你添加的代碼看起來是正確的想法。不知道爲什麼它沒有擊中。嘗試在你調用該函數的地方發佈代碼(事件監聽器部分),以及向陣列添加敵人和子彈的位置。 – 2012-02-18 21:38:26

+0

我檢查並通過故障排除發現它識別數組中的對象。例如,我可以使用removeMovieClip(enemiesArray [yy])使敵人離開舞臺,但我無法訪問任何方法或屬性的動畫片段。我認爲這是我的問題,因爲我正在使用movieclip上的hitTest函數。是否有某些原因導致我無法訪問這些屬性? 編輯:他們都提出了undefined – Nick 2012-02-18 21:43:51

0

您從bulletArray除去2次:

 bulletArray.splice(zz,1); 
     bulletArray.splice(yy,1); 

最後一個應該是敵人去除我猜。也許這會在您以後嘗試移除已經從舞臺上移除的敵人時引發錯誤?

+0

如果我先拼接,然後當我嘗試刪除它時,它會刪除錯誤的對象,我相信 – Nick 2012-02-18 23:51:20

+0

我的意思是你要去掉子彈2次,而不是將敵人從敵人身上移開陣列。如果最後一行不是enemiesArray.splice(yy,1)而不是bulletArray.splice(yy,1);? – Ixx 2012-02-18 23:55:04

+0

謝謝。我錯過了,但我不認爲這是造成問題的原因。 – Nick 2012-02-18 23:58:48

相關問題