2012-10-11 91 views
2

我一直試圖在最近一直在處理的項目中設置hitTestObject函數,並遇到一些困難。AS3 - 通過For循環添加動態影片剪輯的hitTestObject

這是因爲我試圖通過For循環動態添加MovieClip實例來完成此操作。正在添加的影片剪輯被稱爲「正方形」,當我離開鼠標點擊時,我將一系列這些影片剪輯添加到舞臺上。我的問題是我想聽一個hitTestObject'square'截取'square'和後續添加相同的MovieClip。

我已經設置了一個數值變量,每增加一個'方形'影片剪輯通過左鍵單擊到舞臺上就會增加1,並且我將這個數字與一個字符串一起分配以創建一個square.name實例。

在我的情況下,第一組添加的影片剪輯會有一個名爲「Square 1」的.name實例,然後在第二次點擊鼠標時點擊「Square 2」等等。

我還添加了每個名字並將其推送到容器數組中以供稍後參考。

那麼我怎麼才能真正引用這些動態名稱在hitTestObject參數中使用我的.name實例和數組?

我相信這是顯而易見的,我已經做了基礎工作,所以任何幫助指出這一點我會大大appriciated。

很多謝謝。

+0

如果你可以請展示你的基礎工作,我意識到你已經在這裏解釋過(相當好),但不得不想想你的代碼看起來像增加了難度來回答它。 – shaunhusain

+0

我可以完全理解你的觀點@shaunhusain,我會在接下來的幾個小時內發佈我的代碼,以便爲我的問題添加更多的基礎,但同時我想我的查詢的關鍵涉及到關鍵的hitTestObject代碼行(「Contact Made」); - 如果(square.hitTestObject(square))\t \t \t \t \t \t \t}現在顯然這不適用於我所問的問題,但爲了引用我的'正方形'MovieClip並區分它們,我將使用get childByName,還是引用'square'爲square [i]和將此與數組中的.name綁定在一起? – Joel

回答

0

假設您正在嘗試在時間軸中執行此操作,並且您在庫中名爲'Square'的MovieClip子類,這裏有一種可能的方法。當hitTests正在執行時,請小心修改數組。如果要刪除正方形,請等待所有測試完成後,或者複製正方形數組。

var squares: Array = []; 

function addSquares(n: int): void { 
    var square: MovieClip; 

    for (var i: int = 0; 
    i < n; 
    i++) { 
     square = new Square(); 
     square.name = "square" + i; 
     addChild(square); 
     squares.push(square); 
    } 
} 


function checkHits(): void { 
    var square: MovieClip; 
    var checkSquare: MovieClip; 

    for (var i: int = 0; 
    i < squares.length; 
    i++) { 
     square = squares[i]; 

     for (var j: int = i + 1; 
     j < squares.length; 
     j++) { 
      checkSquare = squares[j]; 

      if (square.hitTestObject(checkSquare)) { 
       squaresHit(square, checkSquare); 
      } 
     } 
    } 
} 


function squaresHit(square1, square2): void { 
    // do something 
    trace("squaresHit:" + square1.name + "," + square2.name); 
} 


addSquares(4); 
checkHits(); 

//squaresHit:square0,square1 
//squaresHit:square0,square2 
//squaresHit:square0,square3 
//squaresHit:square1,square2 
//squaresHit:square1,square3 
//squaresHit:square2,square3 
+0

感謝您分享這個@dezza並花時間代表我自己構建這段代碼 - 從閱讀這段代碼開始,它肯定會沿着我試圖製作的內容來看。 addSquares函數基本上覆蓋了我的現有設置,雖然我在類中生成此代碼而不是在時間軸上,但它是checkHits函數中的代碼,它看起來是解決我的問題的關鍵,在+1和hitTesting之間的2 var的動畫片段 - 將嘗試這一點,讓你知道它是怎麼回事。很多再次感謝 – Joel

+0

感謝@dazza - 我已經設法將此代碼實現到我的項目中,並且現在正在兩個具有相同初始實例名稱的影片剪輯之間進行檢測。如果其他人有這個問題,那麼代碼dazza提供的'checkHits()'函數將是一個很好的地方來查看和建立! – Joel