0

我对编码很陌生,我想知道是否可以将对象列表放入数组中以进行碰撞。

而不是写...如果 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

1 回答 1

4

Actionscript Docs所示,hitTestObject()将 aDisplayObject作为参数,而不是任何类型的列表。

如果你愿意,你可以自己实现这种功能。

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))
    ...
于 2012-04-19T20:01:43.457 回答