2010-05-22 2 views
1

특정 공간에 10 개의 항목을 말합니다. 모든 항목에 광선과 그림자를 적용하면 이러한 항목은 모두 정적입니다. 다른 캐릭터도 그들 주위를 움직입니다. 그래서 나는 액션 스크립트 블러와 글로우가있는 벡터를 사용하는 것이 현명 할까하고 생각합니다. 아니면 PNG를 가지고? 그리고 PNG를 가질 수 없으며 빛/흐림/그림자가있는 벡터로 작업해야합니다. 그들은 프로세서에서 너무 무거울까요?Actionscript blur/shadows/glows는 프로세서에서 얼마나 무거워요?

답변

1

비트 맵 필터 (광선, 그림자 등)를 내용에 적용하면 Flash에서 비트 맵 캐싱이라는 기능을 자동으로 켭니다. 해당 기능이 켜져있는 동안 Flash는 객체를 비트 맵으로 렌더링 한 다음 객체를 다시 렌더링해야한다고 결정할 때까지 객체 대신 해당 비트 맵을 사용합니다. Flash는 객체의 내부 (즉, 하위)가 어떤 방식 으로든 변경되거나 객체 자체가 단순 변환 (x/y 변경) 이외의 변형을 겪을 때 객체를 다시 렌더링합니다.

이것이 의미하는 바는 다음과 같습니다 개체가 내부적으로 변화하지 않으며,이 회전하지 않거나 필터를 적용하면 변화의 규모, 다음은 객체가 비트 맵이 포함되어 있는지 여부는 중요하지 않습니다

  1. 경우 또는 벡터. 내부적으로 Flash는 비트 맵에 캐시하여 내부 내용에 관계없이 매우 잘 수행됩니다.
  2. 개체가 내부적으로 변경되거나 회전하거나 크기가 조정되면 Flash는 필터가 적용된 상태에서도 모든 프레임에 개체를 다시 렌더링합니다. 이 경우 객체 내부에 비트 맵을 가지고 있으면 복잡한 벡터 (비 장치 텍스트 포함)를 사용하는 것보다 효과적입니다.
  3. 가능하면 부모 개체에 필터를 적용하는 대신 자주 렌더링 할 필요가없는 자식 개체에 필터를 적용하는 것이 좋습니다.
+0

자세한 답변을 주셔서 대단히 감사합니다. 글로우와 함께 AI 파일에서 벡터를 가져 오는 경우 그것이 어떻게 처리에 영향을 미쳤는지와 마지막 질문 하나에 대해서 말입니다. 벡터에 많은 그라디언트가 있다면? –

+0

일러스트 레이터의 필터를 사용하여 내용을 복사 할 때 어떤 일이 발생할지 모르겠지만 필터가있는 내용으로 표시되거나 내용이 필터로 보이는 비트 맵으로 표시됩니다. 전자의 경우 가져 오기 후 Flash에서 필터를 변경할 수 있습니다.어느 쪽이든 그라디언트에 관계없이 내 대답이 적용됩니다. 그래디언트를 사용하면 렌더링 속도가 느려지므로 비트 맵 캐싱이 켜져 있고 객체를 다시 그릴 필요가없는 경우 한 번만 렌더링됩니다. – fenomas

0

효과 (예 : 블러, 백열, 그림자 등)가있는 PNG는 많은 효과를 코드를 통해 적용되는 벡터 객체보다 훨씬 우수합니다. PNG를 사용할 수 없다면 항상 작은 트릭을 활용할 수 있습니다. BitmapData.applyFilter()! 이 방법은 대단한 것이며 사용자가 설명하는 것과 동일한 상황에서 상당한 성능 향상을 찾을 수있었습니다. 대신 벡터 그래픽을 사용하는 난과 같이 벡터 객체의 비트 맵 스냅 샷을 생성합니다 :

var vectorGraphic:MovieClip = someVectorObectThatNeedsFiltersAppliedToIt; 
var bmd:BitmapData = new BitmapData(vectorGraphic.width, vectorGraphic.height, true, 0x000000); 
var glow:GlowFilter = new GlowFilter(0x00ffff, 1, 4, 4, 2, 1, false, false); 
bmd.draw(vectorGraphic, null, null, null, null, true); 
bmd.applyFilter(bmd, new Rectangle(0, 0, bmd.width, bmd.height), new Point(0, 0), glow); 
var bmp:Bitmap = new Bitmap(bmd, 'never', true); 

행운을 빕니다!

+1

'cacheAsBitmap'이 표시하지 않은 코드와 완전히 똑같습니까? – amn

+0

@ amn 아마도 내가 틀렸을 지 모르지만 나는 그렇게 생각하지 않습니다. 결과 비트 맵'bmp'는'cacheAsBitmap' 값이'false'입니다. 그래서 당신은'cacheAsBitmap'과 함께 제공되는 퍼포먼스 오버 헤드없이'bmp'의 알파를 스케일링, 회전, 조정할 수 있다고 생각합니다. 당신의 의견은 제 생각에 두 번째 추측을하게 만들었지 만 문서/포럼을 살펴 보았지만 어떤 식 으로든 다른 것을 찾지는 못했습니다 ... – heavilyinvolved

+0

글쎄, 성능면에서 볼 때 'DisplayObject'를 당신이하는 것처럼'BitmapData'는 실제로이 기사가 말한 내용에 따라 올바른 것입니다 : 1. http://www.bytearray.org/?p=117 2. http : //www.bagonca .com/blog/2009/04/17/use-cacheasbitmap-correctly-or-not-at-all/ – amn

관련 문제