2012-02-08 70 views
0

我正在構建一款pacman風格的遊戲,我期待縮短我的代碼。 該階段包含92個實例,其中實例名稱爲food1,food2等。 當玩家(pacman)碰到其中一個想要調用funcion的實例時。as3 hitTestObject with 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 2012-02-08 22:37:46

回答

3

看着你的食物儲存在Array

建立一個數組:

var food:Array = []; 

添加您的食物到這個陣列(如適用):

food.push(myFood); 

然後你就可以使用for each通過這個陣列中的項目運行:

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循環,它看起來是這樣的:

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

作爲一種審美的好處,使用應用程序像FlashDevelop將極爲提供根據您添加什麼到你的食品類,如有益的提示:

enter image description here

+0

當你使用food.push(M yFood); (myFood)引用是什麼? – hillspro 2012-02-09 19:34:51

+0

「食物」的實例(或者在你的情況下,代表食物的「影片剪輯」)。 – Marty 2012-02-09 21:59:35