2012-02-08 4 views
0

나는 팩맨 스타일의 게임을 만들고 있으며 코드를 줄이려고합니다. 스테이지에는 food1, food2 등의 인스턴스 이름을 가진 92 개의 인스턴스가 포함되어 있습니다. 플레이어 (팩맨)가 인스턴스 중 하나를 클릭하면 기능 호출을 원합니다.as3 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에 보관하십시오.

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을 만들 수 있습니다. 음식의 모든 부분을 수행해야합니다. 극단적으로 제공 할 것입니다 FlashDevelop 같은 응용 프로그램을 사용하여,

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

을 미적 혜택으로 :

것은 그것은 또한 당신이 특히 다음과 같이 할 수 위의 for each 루프에 훨씬 깨끗하고 읽을 수있는 코드를 할 수 있습니다 당신은 예를 들어, 푸드 클래스에 추가하는 내용에 따라 도움이되는 도구 설명 :

enter image description here

+0

당신이 food.push를 사용 (m yFood); (myFood)가 참조하는 것은 무엇입니까? – hillspro

+0

'Food'의 인스턴스 (또는 사용자의 경우 음식을 나타내는 'MovieClip'). – Marty

관련 문제