1

저는 AS3에서 게임을 작성하고 있으며, 예를 들어 화면에 약 40 개의 개체가 있습니다. 구름이라고합시다.AS3 : EventListeners 또는 ArrayLoops를 더 빨리 사용할 수 있습니까?

가) 각 개체에 EventListener를 넣고 그 자체를 업데이트, 또는

b)는 루프를 배열을 수동으로 업데이트 : 나는 두 경로 중 어느 것이 시스템 리소스에 적은 부담이 될 것 궁금하네요 각 개체

성능 차이가 있습니까? 어느 솔루션이 다른 솔루션보다 확장 성이 좋습니까?

+0

을하는 데 도움이됩니다. Flash의 진정한 전문가 (Andre Michelle, Joa Ebert)가 설계 한 맞춤 이벤트 시스템입니다. 직접 보러 간다 :) – Allan

답변

0

이 방법으로 루프 루핑 방법으로 가려는 순수한 사람들은 MVC에서 '뷰'를 잘라내어 여전히 시스템을 작동시킬 수 있습니다. 모든 시스템의 좋은 테스트). 그러나 이벤트로 작업하는 경우 이벤트 버블 링 및 엄격한 타이핑을 사용하여 일부 모서리를 줄일 수 있습니다. 예를 들어 이라는 사용자 지정 이벤트에 cloud이라는 디스패치에 대한 참조가 포함 된 것으로 가정하면이 이벤트는 기본적으로 이벤트 거품이 발생하는 한 각 이벤트 수신기를 추가 할 필요가없는 한 이라는 속성이 있습니다. 하나, 그냥 그들을 보유하고 DisplayObjectContainer (나는 상상적으로 CloudContainer 전화)입니다. 이렇게하면 이벤트가 터져서 하나의 리스너 만 추가하면되고 자식 항목에 리스너를 관리하는 것에 대해 걱정할 필요가 없습니다. 당신이 http://opensource.hobnox.com/ 체크 아웃 아마도 다음 이벤트 리스너 길을 갈 경우

public function CloudContainer() 
{ 
    super(); 
    addEventListener(CloudEvent.CHANGE, cloudChangeHandler); 
} 

private function cloudChangeHandler(evt:CloudEvent):void 
{ 
    var cloud:CloudSprite = evt.cloud; 
    cloud.update(); 
} 

희망이

1

성능이 어느 정도 과실 할 것으로 예상됩니다. 일단 많은 객체를 얻으면 차이가 발생할 수 있습니다 (루프가 승자가 됨). 필자의 경험에서 Adobe는 actionscript 이벤트 리스너 경로를 최적화하는 데 많은 노력을 기울였습니다.

0

이벤트 리스너가 더 많은 리소스를 필요로한다는 인상하에 있으므로 성능이 필요할 때 배열을 사용하는 것이 좋습니다. 또한 그 이유 때문에 더 잘 확장 될 것입니다. Flash 10을 사용하고 Vector를 사용하는 경우 배열 (및 유형 안전)보다 성능이 좋습니다.

+0

"안전"또는 "제한"을 입력 하시겠습니까? –

+0

유일한 제한 사항은 AS3가 제네릭을 지원하지 않기 때문에 일반 데이터 구조를 생성해야한다는 것입니다. ( – Allan

0

EventListeners를 사용하십시오! 그냥 제대로 관리하는지 확인하십시오. 작업을 마쳤 으면 약한 참조를 사용하십시오.

정말 이런 일을하면 성능이 많이 떨어질 것입니다. 보통 더 나은 성능은 필터를 사용하지 않고 프레임 속도를 낮추는 것과 같이 큰 눈금을 부른 항목에서 비롯됩니다. 따라서 반 밀리 초의 시간 동안 코드 선명도와 객체 지향을 처벌하는 것은 제 책에서 가치가 없습니다.

AS3에서 최적화하는 방법을 모두 가르쳐주는 훌륭한 가이드가 있습니다. 내가 찾은 최고의 사람은 Grant Skinner's; AS3 Resource Management입니다. 방금 quicker seven step version을 찾았습니다. 나는 확실히 AS3를하는 모두가 Skinner 그랜트 슬라이드를 읽어야한다고 권장 할 것이다.

물론 내 말 (또는 다른 사람이 질문에 대답)을 취하지 않으면 테스트를 직접 수행하고 프로파일 러를 사용하여 실제로 무엇을 볼 수 있습니다. 이를 수행하는 방법에 대한 Lee Brimlow의 최신 비디오 자습서를 참조하십시오. 그것은 가치가 시계입니다! 여기에서 확인하십시오 : GotoAndLearn - ActionScript 3 Performance Testing.

+0

명확성 및 객체 지향을 희생한다는 이벤트 리스너를 사용하지 않음으로써 말하는 것은 아닙니다. 나는 보통의 인터랙티브 아이템과는 상당히 다르다. 나는 게임 루프를 가지고있는 경향이있다. 엔티티를 거쳐 루프를 업데이트하고 (아마도 최적화를 위해 쿼드 트리를 사용하여) 월드를 업데이트한다.이 방법은 De Facto 인 것처럼 보인다. 내 관찰 (XNA 프레임 워크, 일부 C++ 코드 샘플)의 게임 디자인 표준. – Allan

+0

일반적으로 언어의 모범 사례를 준수한다는 것을 제외하고는 진실이라고 말하면서 AS3에서 일반적으로 Adobe의 방식을 따르려고합니다. –