2012-11-16 7 views
2

나는 무작위로 그리고 연속적으로 움직여야하는 6 개의 물체를 가지고 있습니다. 각각의 객체를 별도로 입력하거나 모든 객체를 처리하는 루프로 1 개의 엔터 프레임을 입력하는 것이 효율적입니까?AS3 : Enterframe/s에서 루프

var myObjArray:Array = new Array(); // Contains 6 movieclip objects 

for(var i=1; i<=6; i++) 
{ 
    var Square:MoveObject = new MoveObject(); 
    Square.addEventListener(Event.ENTER_FRAME, Square.go); 
    myObjArray[i] = Square; 
} 

public Class MoveObject extends Movieclip{ 
    public function go(e:Event):void 
    { 
     this.x++; 
    } 
} 

또는 하나의 EnterFrame 함수에서 루프를 통과합니까?

+3

모든 개체를 업데이트하기 위해 단일 enterframe 수신기를 사용하는 것이 좋습니다. – chq

답변

4

모든 함수 호출에는 성능상의 불이익이 있습니다. 그 이유는 사람들이 코드의 중요한 부분 (함수 호출을 작성하는 대신 함수 내용을 인라인으로 표현)에서 "인라인"함수에 대해 이야기하는 이유입니다.

그런 경우 가장 좋은 경우는 하나의 수신기 만 추가하고 해당 수신기에서는 6 개의 모든 객체를 반복하는 것입니다. 또 다른 팁 - 루프를 역순으로 반복하면 배열의 .length() 함수를 한 번만 호출하는 반면, 길이가 0부터 반복하면 for 루프는 매번 길이 함수를 호출하여 조건이 만났다.

function enterFrame(e:Event):void 
{ 
    for (var i:int=myObjArray.length-1; i>=0; i--) { 
    myObjArray[i].x++; 
    } 
} 

는 확실히 다른 최적화 (어떤 사람들은 --i가 난 -보다 빠른 말하지만, 난이 ActionScript에 사실 잘 모르겠어요)이 있습니다.

물론 6 개 개체의 경우 큰 문제는 아니지만이를 확장하면 분명히 단일 수신기를 사용하려고합니다.

+1

당신은 또한 길이를 멀리 저장할 수 있고 이상한 역방향 루프가 없습니다.) –

+0

@ Jeff Ward, Gr8 reply. 당신은 6 개의 객체가 큰 거래가 아니라고 말했고 안드로이드 기기에서도 마찬가지입니다. – Muhammad

+1

이상한 거꾸로 된 루프는 또한 즉시 수정할 수있게 해줍니다. :) @Muhammad - 리소스는 항상 모바일에서 엄격 해집니다. 책에서 모든 최적화 기법을 사용하는 것이 가장 좋습니다 (객체 풀, 인라인 함수, 단일 이벤트 핸들러 - 특히 터치 이벤트 용). –