2012-04-19 101 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

相关问题