2015-06-20 78 views
1

我有一個遊戲玩家向前移動(半)隨機瓷磚。我希望當玩家擊中某個瓷磚時能夠達到最佳效果。hitTestObject如何適用於許多對象?

然而,當char碰到floor2中產生的其中一個時,什麼都不會發生。

我想這是因爲舞臺上有多個'floor2'影片剪輯?

當我追蹤floor2的界限「getBounds」時,它所顯示的位置總是隨着所有這些變化而改變爲Hitest?

function handleCollision(e:Event):void {  
if(char.hitTestObject(floor2)){ 
trace("hit detected"); 
} 

這是玩家在如何產卵:

var char:Char = new Char(); 
char.x = 275; 
char.y = 786; 
cam.addChild(char); 

這是如何floor2產卵在:

if (randomRounded > 10 && randomRounded <= 50){ 
floor2 = new Floor2(); 
floor2.x = -8.45; 
floor2.y = 786 - tileCounter; 
cam.addChildAt(floor2, stage.numChildren-1); 

額外:(RandomRounded是隨機生成的數字),(有'Var floor2:Floor2;')

請幫忙:(

回答

1

變量只能引用最多一個值。所以你的floor2變量只能引用一個Floor2對象。如果您分配一個新值,該變量將引用該值。

你應該做的是使用Array,它可以容納許多對象。

var floors:Array = []; 

if (randomRounded > 10 && randomRounded <= 50){ 
    floor2 = new Floor2(); 
    floor2.x = -8.45; 
    floor2.y = 786 - tileCounter; 
    cam.addChildAt(floor2, stage.numChildren-1); 
    floors.push(floor2); // add the reference to the array, now floor2 can safely be overwritten by a new value without losing the previous one 
} 

在函數handleCollision中,您將遍歷數組以測試每個單獨的地板對象。這裏有一個如何可能看起來像一個快速的未經測試的例子:

function handleCollision(e:Event):void 
{ 
    for (var i:uint = 0; i< floors.length; ++i) 
    {  
     if(char.hitTestObject(floors[i])) 
     { 
      trace("hit detected"); 
     } 
    } 
} 
+0

太感謝了,反正是有,我來測試handleCollision全陣列式不只是說地板[2]但所有的被推向它 – Woolff

+0

@Woolff你必須迭代它,for循環是一種方法來做到這一點。請檢查我的編輯答案爲例。 – null

+0

我不能夠感謝你!解決問題:D! – Woolff