簡體   English   中英

AS3:如何將一個數組中的對象與另一個數組中的對象進行測試

[英]AS3: How do I hittest objects in one array with objects in another array

據我了解:

如果我要測試兩個非數組對象,則代碼為:

if(player.hitTestObject(enemy))
{
}

如果我要用數組中的每個對象測試一個非數組對象,則相同的代碼也將起作用。

但是,如果我想用一個數組中的每個對象命中另一個數組中的每個對象,該怎么辦?

這里是一個資源型之一,如果你想知道的是任何項目是否擊中任何其他項目:

public function anyItemWasHit( arr1:Array, arr2:Array ) : Boolean {
    for each( var item:DisplayObject in arr1) 
        if( itemHitArrItem( item, arr2 ) ) 
            return true;
    return false;
}

private function itemHitArrItem( item:DisplayObject, arr:Array ) : Boolean {
    for each( var arrItem:DisplayObject in arr ) 
        if( item.hitTestObject( arrItem ) )
            return true;
    return false;
}

根據前面的示例,這是一個返回所有擊中任何其他項目的所有項目的數組:

public function itemsThatHitOtherItems( arr1:Array, arr2:Array ) : Array {
    var items:Array = [];
    for each( var item:DisplayObject in arr1 )
        if( itemHitArrItem( item, arr2) )
            items[items.length] = item;
    return items;
}

最后,一個返回所有對數組的形式(即打另一項目的項目, 被擊中的項目):

public function allPairsThatHitEachOther( arr1:Array, arr2:Array ) : Array {
    var pairs:Array = [];
    for each( var item:DisplayObject in arr1 ) {
        var itemPairs:Array = allPairsForItem( item, arr2 );
        if ( itemPairs.length > 0 ) 
            pairs = pairs.concat( itemPairs );
    }
    return pairs;
}

private function allPairsForItem( item:DisplayObject, array:Array ) : Array {
    var pairs:Array = [];
    for each( var otherItem:DisplayObject in array )
        if( item.hitTestObject( otherItem ) )
            pairs[pairs.length] = [item, otherItem];
    return pairs;
}

我猜你真的只是在問語法。 在這種情況下,它將是:

哪里:

  • indexOne從0到arrayOne.length-1(可以在for循環中)
  • indexTwo從0到arrayTwo.length-1(也可以在嵌套的for循環中)

    arrayOne [indexOne] .hitTestObject(arrayTwo [indexTwo])

outerLoop: for (var i:int = 0; i < arr1.length; i++) {
    var obj1:DisplayObject = arr1[i] as DisplayObject;
    for (var j:int = 0; j < arr2.length; j++) {
        var obj2:DisplayObject = arr2[j] as DisplayObject;
        if (obj1.hitTestObject(obj2)) {
            // these 2 hit each other
            break outerLoop;
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM