2012-02-08 21 views
0

私はパックマンスタイルのゲームを構築しています。私はコードを短縮しようとしています。 ステージには、フード1、フード2などのインスタンス名を持つ92個のインスタンスが含まれます。 プレイヤー(パックマン)がインスタンスの1つにヒットしたときに、関数を呼びたいとします。as3 forTopObject for forループ

私はこれを書いて始めました...それは動作しますが、私はこの92回を複製したくありません!

if(player.hitTestObject(food1)) { 
    updateScore(); 
} 

if(player.hitTestObject(food2)) { 
    updateScore(); 
} 

私はこれらの行に沿って何かを試していますが、まだ成功していません。

function collectFood() { 
    var i:Number; 
    var pGroup:String 

    for (i=0; i<92; i++) { 
     pGroup= "food" + i; 
     if(player.hitTestObject(MovieClip(pGroup))) { 
      pCount+= 1; 
      MovieClip(pGroup).y=-300; 
      updateScore(); 
     } 
    } 
} 

ありがとうございました!

+0

ここで書き込みクラスに入るためにあなたのチャンスです... – weltraumpirat

答えて

3

Arrayに食品を保管してください。

food.push(myFood); 

そしてあなたは、この配列内のアイテムを介して実行するfor eachを使用することができます。

var food:Array = []; 

は、この配列(適用可能であれば)にあなたの食品を追加します。

は、Arrayを設定します。

for each(var i:MovieClip in food) 
{ 
    // do stuff with i 
    // i represents an instance of your food 

    if(player.hitTestObject(i)) 
    { 
     pCount ++; 
     pGroup.y -= 300; 

     updateScore(); 
    } 
} 

あなたがステージ上に食べ物を持っていて、すべてをこのArに追加したい場合レイは、ちょうどこの操作を行います。

for(var i:int = 0; i<92; i++) 
{ 
    food.push(MovieClip(this["food"] + i)); 
} 

私は強くあなたがObject-oriented programming (OOP) for ActionScript-3に見えることを示唆しています。 OOPを使用すると、あなたのFoodencapsulateのためにclassを作成することができます。

また、特に次のようになります上記for eachループ、で、あなたは非常にクリーンで読み取り可能なコードを持ってできるようになります:FlashDevelopは非常に提供されますようなアプリケーションを使用して、審美的な利点として

for each(var i:Food in food) 
{ 
    // i is an instance of Food 
} 

あなたは食品クラスに追加した内容に基づいて有用なツールチップ、例えば:

enter image description here

+0

あなたがfood.push(メートルを使用yFood); (myFood)は何を参照していますか? – hillspro

+0

'Food'のインスタンス(またはあなたのケースでは、食品を表す' MovieClip')です。 – Marty