2013-02-11 8 views
0

foodArray라는 배열에 넣는 food라는 무비 클립이 있습니다. 각 음식을 오른쪽으로 이동시키는 고유 한 클래스 (Mover라고 함)가 있습니다. 특정 지점에 도달하면 음식이 사라집니다.특정 지점에서 객체를 만드는 방법 3

다음은 Main 클래스에 넣은 음식을 사라지게하는 코드입니다. 나는 이것을 Enter Frame에 넣었다.

var l:int = foodArray.length - 1; 
while ((l > -1)) 
{ 
    if (foodArray[l].x > 1020) 
    { 
     removeChild(foodArray[l]); 
     foodArray.splice(l,1); 
    } 
    l = l - 1; 
} 

는 그리고 이것은 무버 클래스

public function Mover(inputMC:MovieClip, xV:Number) 
{ 
    this.insMC = inputMC; 
    this.xVel = xV; 
} 
public function startMove():void 
{ 
    this.insMC.addEventListener(Event.ENTER_FRAME, this.updatePos); 
} 
protected function updatePos(e: Event):void 
{ 
    this.insMC.x += this.xVel; 
} 
public function stopMove():void 
{ 
    this.insMC.removeEventListener(Event.ENTER_FRAME, this.updatePos); 
} 

음식은 잘 사라지고,하지만 단지 심지어 사라질해야하는 시점 이후 계속 몇 가지 음식이 있습니다. 문제는 배열 길이와 같다고 생각하지만 확신 할 수는 없습니다. 도움말 크게 감사하겠습니다. :)

이것은 내가 처음 열한 번째 음식을 만드는 곳입니다. 그래서 저는 각 타임 라인마다 여섯 가지 다른 그림이있는 음식이라는 영화 클립을 가지고 있습니다. 난 무작위로 음식을 만들고 싶다. 내가 한 번

function addFood() 
{ 
    randomFood = Math.ceil(Math.random() * 6); 
    food = new Food(); 
    food.gotoAndStop(randomFood); 
    food.x = 76; 
    food.y = 675; 
    addChild(food); 
    foodArray.push(food); 
    food.sequece = foodSeq; 
    food.code = randomFood; 
    food.addEventListener(MouseEvent.MOUSE_DOWN,onDown); 
    foodSeq++; 
    //mover 
    mover = new Mover(food,XVEL); 
    moverArr.push(mover); 
    mover.startMove(); 
    //timer 
    timerFood.reset(); 
    timerFood.addEventListener(TimerEvent.TIMER, timerForFood); 
    timerFood.start(); 
} 

에 하나의 음식을 추가 할 경우 여기

function showFood() 
{ 
    const ROW = 11; 
    for (foodSeq = 0; foodSeq < ROW; foodSeq++) 
    { 
     randomFood = Math.ceil(Math.random() * 6); 
     food = new Food(); 
     food.gotoAndStop(randomFood); 
     food.x = 1010 - (84 * (foodSeq % ROW)); 
     food.y = 675; 
     addChild(food); 
     foodArray.push(food); 
     food.sequence = foodSeq; 
     food.code = randomFood; 
     food.addEventListener(MouseEvent.MOUSE_DOWN,onDown); 
     //mover 
     mover = new Mover(food,XVEL); 
     moverArr.push(mover); 
     mover.startMove(); 
    } 
    addFood(); 
} 

그리고이는 addFood 기능을

function timerForFood(t: TimerEvent) 
{ 
    if (timerFood.currentCount > 2) 
    { 
     addFood(); 
    } 
} 
+3

foodArray에 어디에서 추가하고 있습니까? 해당 코드를 게시하십시오. – Montycarlo

+0

나는 이미 내 질문을 편집했다. 거기에있는 코드를 볼 수있다. – blissaster

답변

1

나는 몇 가지 변화를 만들 것을 트리거하는 타이머입니다. 먼저 Mover에서 이벤트 리스너를 제거하고 while 루프에서 update 메서드를 호출 할 수 있습니다. 따라서 다중 리스너 프레임을 사용할 필요가 없습니다 (모든 리스너를 제거 할 수 없기 때문에 많은 메모리 누수가 있음).

추한 루프이므로 건너 뛰기도합니다. 추한 것이므로 코드를 이해하기가 더 어려워집니다. 배열에 수천 개의 항목이 없으면 조금 더 빠르지 만 그다지 중요하지 않습니다.

for (var i:int = 0; i<foodArray.length; i++) { 
    var food:Mover = foodArray[i]; 
    food.updatePos(); // Remove the parameters from the updatePos method, since you're not using it any more. 
    if (food.x > 1020) { 
     foodArray.splice(i,1); 
     i--; 
    } 
} 

말했다되고 그건, 그래서 좀 더 코드를 게시하시기 바랍니다, (당신의 뒤쪽 루프에서 뭔가 이상한이없는 한) 코드와 분명히 잘못 아무것도 볼 수 없습니다.