2012-04-19 99 views
0

我對編碼非常陌生,我想知道是否可以將數組中的對象列表用於碰撞。我可以把一個對象列表或類似的東西嗎? AS3

而不是寫...如果player.hitTestObject(wall1)然後牆2然後牆3?

我可以把他們都在一個陣列中或別的東西,所以我只能說,如果player.hitTestObject(everywall)

感謝。我的代碼看起來像這樣,我有大約30牆。

如果有人發佈了一個示例,我將不勝感激。

function keydown(event:KeyboardEvent) :void { 

switch(event.keyCode){ 

    case Keyboard.LEFT : 

    hero.x -= 10; 

    if(hero.hitTestObject(w1) || hero.hitTestObject(w2) || hero.hitTestObject(w3) || hero.hitTestObject(w4)){ 
    hero.x +=10;} 
    break; 

    case Keyboard.RIGHT: 
    hero.x +=10; 
    if(hero.hitTestObject(w1) || hero.hitTestObject(w2) || hero.hitTestObject(w3) || hero.hitTestObject(w4)){ 
    hero.x -=10;} 
    break; 

    case Keyboard.UP: 
    hero.y -=10; 
    if(hero.hitTestObject(w1) || hero.hitTestObject(w2) || hero.hitTestObject(w3) || hero.hitTestObject(w4)){ 
    hero.y +=10;} 

    break; 

    case Keyboard.DOWN: 
    hero.y += 10; 
    if(hero.hitTestObject(w1) || hero.hitTestObject(w2) || hero.hitTestObject(w3) || hero.hitTestObject(w4)){ 
    hero.y -=10;} 
    break; 

    default : 
    break; 
} 

回答

4

Actionscript Docs所示,hitTestObject()需要DisplayObject作爲參數,而不是任何類型的列表。

如果你願意,你可以自己實現這種功能。

function myHitTest(obj:DisplayObject, arr:Array):Boolean { 
    for (var i:int = 0; i < arr.length; ++i) { 
    //for (var item:DisplayObject in arr) { 
     var item:DisplayObject = arr[i] 
     if (obj.hitTestObject(item)) { 
      return true; 
     } 
    } 

    return false; 
} 

然後你就可以使用...

if(myHitTest(hero,[w1,w2,w3])) 
    ... 

var everywall:Array = [w1,w2,w3]; 
... 
if(myHitTest(hero,everywall)) 
    ... 
+0

不知道你可以爲(VAR項目:的DisplayObject:ARR)寫的風格爲循環AS – 2012-04-19 20:03:51

+0

@BarisUsakli你可以。我不得不修復一些語法,因爲它非常有限制。 – 2012-04-19 20:06:02

+0

哦,我現在看到你的編輯,對於(var obj:Object in array)是我使用的,我不認爲有一個for循環使用:在AS3中,無法編譯。 – 2012-04-19 20:07:27

相關問題