2013-04-30 1 views
1

플래시에서는 Flash IDE에 그려진 MovieClip을 SWF에 포함 한 다음 car = new Car()과 같은 클래스 경로를 사용하여 SWF의 인스턴스를 만들 수 있습니다. 코드 실행 시간 또는 렌더링 시간면에서 드로잉 API (예 : moveTo, lineTo)를 사용하는 것보다 이러한 임베디드 애셋이 느 립니 까?드로잉 API 속도와 내장 그래픽

인터넷을 통해 어디에서나 검색했지만이 문제에 대해 자세히 설명하지 않았습니다. 이 코드는 one SO post이며 "빠른 코드 실행을 위해 드로잉 API 사용"이라고되어 ​​있습니다.

물론 비트 맵으로 렌더링하고 나중에 다시 사용하는 것이 가장 빠르지 만, 어느 시점에서 벡터 그래픽을 비트 맵으로 렌더링하고 위의 방법 중 하나를 사용해야합니다.

더 빠르고 더 쉬운 이유를 알고 있습니까?

+2

차이가 없어야합니다. 포함 된 SWF는 펜 도구 또는 이와 유사한 도구를 사용하여 그려지더라도 Drawing API를 사용할 때와 동일한 방법으로 벡터를 그립니다. 벡터 그래픽은 여전히 ​​그려야합니다. 비트 맵을 사용하면 벡터보다 훨씬 빠르지 만 말했듯이 비트 맵을 사용할 수없는 경우가 있습니다. –

+0

질문에 직접적으로 관련이 없지만 동영상 클립에 cacheAsBitmap = true를 설정하여 렌더링 성능을 향상시키기 위해 비트 맵으로 처리 할 수 ​​있습니다. –

답변

1

소스에 관계없이 표시 목록의 스테이지 무효화 신호 렌더링시 모든 벡터 자산을 그려서 다시 그려야합니다.

저는 Flash Pro의 대지를 통한 저작 도구가 중요한 최적화로 변환되지 않는다고 생각합니다. 생각보다 복잡하기 때문에 타임 라인 레이어 요소 그룹, 그림자, 그라데이션 및 둥근 사각형과 같은 프리미티브와 같은 요소가 다르게 처리 될 수 있습니다. 또한 연필 도구로 만든 선은 브러시 획보다 메모리가 적습니다.

Flash Catalyst와 마찬가지로 Flash Pro는 각 벡터를 개별적으로 렌더링하므로 복잡한 객체는 게시 된 응용 프로그램에서 성능이 크게 저하 될 수 있습니다. 기호는 두 번 이상 나타나는 요소에 사용되어야하고, 요소는 그룹화되어야하며, 타임 라인 레이어는 변경되지 않은 요소에서 분리해야합니다.

Flash Player 10 and AIR 1.5 provided a new drawing API 코드 실행 횟수를 줄여 성능을 높일 수 있습니다. 이 기능은 다음과 같습니다

  • drawPath()
  • drawGraphicsData()
  • drawTriangles() 언급 한 바와 같이

, cacheAsBitmap 번역의 성능을 향상시킬 수 있습니다; 그러나 크기가 조정되거나 회전 될 때 다시 그려집니다.

래스터 비트 맵 에셋은 거의 항상 최고의 성능을 제공합니다. blitting/bit blit과 애니메이션 용 비트 맵 스프라이트 시트와 같은 기법은 벡터 드로잉보다 성능이 우수합니다.

내 앱에서 자주 구현하는 기술은이 StackOverflow 게시물 (AS3 Blitting - Copy Pixels getting some of the souce image)에 표시된 것과 같이 벡터 애셋의 스테이지 렌더링이 아닙니다.

이 방법을 사용하면 벡터 에셋의 크기가 조절 될 수 있습니다. 그러나 비트 맵만 표시 목록에 추가됩니다.

그래픽 렌더링 성능에만 국한되지 않고 Shape 또는 Sprite을 사용하면 동적 인 MovieClip 클래스에 비해 성능이 약간 향상됩니다.

+0

BitmapDatas를 페어링하거나 표시 목록에 많은 Bitmap 객체를 추가하는 것이 더 빠르지 않습니까? 하나의 Bitmap을 사용하고 copyPixels를 수동으로 사용하여 필요한 객체를 배치하십시오. –

+0

정적 인 내용을 하나의 인스턴스로 유지하고, 애니메이션 된 내용을 위해 비트 맵을 사용합니다. –

관련 문제