0

많은 수의 객체 (2000+)에서 몰래/조향 동작을위한 라이브러리 클래스를 개발 중입니다. 나는 < 500 인스턴스에서 성능이 합리적임을 알게되었습니다. 숫자가 증가하면 프레임 속도가 느려집니다.ActionScript 3 최적화 - 많은 수의 객체로 성능 향상시키기

플린트 (Flint) 나 Box2D와 같은 라이브러리에서 우스꽝 스러울 정도로 많은 입자/오브젝트를 사용하여 놀라운 성능을 보았 기 때문에, 코드를 최적화/리팩터링하여 좀 더 향상시킬 수 있어야합니다.

비트 연산과 루프 최적화와 같은 기본적인 최적화에 대해 알고 있습니다. 고려해야 할 더 근본적인 접근법이 있습니까? 예를 들어, 현재 각 인스턴스는 벡터 기반 MovieClip입니다. BitmapData로 작업하는 것이 더 효율적입니까?

+0

간단히 말해서 BitmapData 대 벡터 기반 무비 클립을 사용하는 것이 맞다고 생각하면 MovieClip에서 cacheAsBitmap을 true로 설정하는 것보다 훨씬 효율적으로 작업 할 수 있습니다. 일반적으로 말해서 Flex/Flash에서 최대 성능 향상을 얻은 것은 개체의 생성 및 파괴를 엄격하게 제어하는 ​​것으로 보이지만, 분명히 알지만 이미 만들어진 개체를 다시 사용할 수있는 모든 작업을 수행합니다. 또한 플레이어가 Number로 최적화 할 때 uint 또는 int 대신 Number를 사용하는 것처럼 보일 수도 있습니다. – shaunhusain

+0

특히 Google지도 플래시 API와 함께 사용할 코드를 최적화 할 때 이러한 기술을 사용했습니다. 자세한 내용은 http://www.svennerberg.com/2009/01/handling-large-amounts-of-markers-in-google을 참조하십시오. -maps/Bindable의 사용을 피하는 것이 좋습니다. 이는 가능한 불필요한 오버 헤드를 추가 할 가능성이 있기 때문에 권장합니다 (청취자/발송자 코드를 AS3에 추가하고 자동으로 이벤트를 전달하는 데 많은 비용이 듭니다). – shaunhusain

답변

1

벡터를 잊어 버리십시오.

비트 맵 데이터로 캐시하고 비트 맵에 그리거나 그래픽에 비트 맵 채우기 사각형을 그립니다.

사용하지 마십시오. 주위에 방법을 찾는다. 영리하다. 비트 맵 룩업 테이블, 캐싱, 더 많은 룩업 테이블. 낭비되는 CPU주기에 PROCESSOR를 보내는 대신 다른 방향,보기, 프레임 등을 캐싱하는 데 RAM을 사용합니다.

+0

저는 지금 BitmapData 실험을하고 있습니다. Flash Player 10.1에서 약간의 불필요한 부분이 있지만이 도메인에서 가능한 많은 최적화가 있습니다. 환상적인 리소스/튜토리얼입니다 (파티클에 관한 것이기도하지만 몰려 들지는 않습니다) http://unitzeroone.com/blog/2011/01/16/the-particle-sessions-part-one-is-this-it/ –