0

私が理解していることから:

2つの非配列オブジェクトをヒットテストする場合、コードは次のようになります。

if(player.hitTestObject(enemy))
{
}

配列内のすべてのオブジェクトを使用して非配列オブジェクトをテストする場合にも、同じコードが機能します。

しかし、1つの配列内のすべてのオブジェクトを、2番目の配列内のすべてのオブジェクトでヒットテストしたい場合はどうすればよいですか?

4

3 に答える 3

1

これがリソースに優しいものです。知りたいのは、いずれかのアイテムが他のアイテムヒットするかどうかだけです。

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;
}
于 2013-01-04T02:34:39.800 に答える
0
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;
        }
    }
}
于 2013-01-04T01:53:49.290 に答える
0

あなたは本当に構文について質問しているだけだと思います。この場合、次のようになります。

どこ:

  • indexOneは0からarrayOne.length-1になります(forループに含めることができます)
  • indexTwoは0からarrayTwo.length-1になります(ネストされたforループに含めることもできます)

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

于 2013-01-04T01:48:31.050 に答える