플래시 게임의 렌더링 성능


11

네이티브 플래시 렌더링과 사용자 정의 BitmapData프레임 버퍼 빌드 에 대해 SO에서 읽었 으며 일부 답변이 약간 상충되었으므로 궁금합니다.

  1. 일반적으로 사용자 정의 비트 맵 버퍼 경로를 사용하는 것이 가장 좋은 방법입니까 아니면 렌더링을 플래시 엔진에 그대로 두는 것이 가장 좋습니다?
  2. MovieClip스프라이트가 아닌 벡터 애니메이션을 사용 하는 경우 위의 답변이 변경됩니까?
  3. 그렇다면 스프라이트 기반 애니메이션을 사용하는 것이 가장 좋습니다?

(차이가있는 경우 Flash 10을 타겟팅하고 있습니다)

답변:


14

1. 일반적인 모범 사례는 없습니다.

게임에 많은 (복잡한 모양의) 요소, 파티클 등이 있다면 비트 맵 버퍼 접근 방식이 훨씬 빨라질 것입니다. 비트 맵 버퍼는 스프라이트의 복잡성이 증가함에 따라 확장 성이 향상됩니다. 벡터 렌더러 더 복잡한 모양이나 트윈 (모양 트윈) 애니메이션으로 느려질 수 있지만 다음과 같은 장점이 있습니다.

  • 애셋을 자유롭게 스케일링하거나 품질 손실없이 장면을 확대 할 수 있습니다.
  • 회전 또는 기울이기 같은 다른 변형은 벡터 그래픽에서 훨씬 쉽게 수행 할 수 있습니다.

결론적으로 그것은 어떤 종류의 게임을 만들고 있는지에 달려 있습니다.

2. 비트 맵 스프라이트 시트 대신 MovieClips 사용

AS3 Sprite 클래스가 아닌 "비트 맵 스프라이트 시트"를 의미한다고 생각 하십니까?

이것은 실제로 차이를 만들지 않습니다. 언제든지 MovieClip 기반 애니메이션을 애니메이션 비트 맵으로 바꿀 수 있습니다. 동영상을 프레임으로 내보내 수동으로 스프라이트 시트로 바꾸 거나 런타임에 MovieClip에서 스프라이트 시트를 렌더링하여 동적으로 만듭니다. 이 작업을 수행하는 방법은 다음과 같습니다.

  1. MovieClip의 인스턴스와 그 인스턴스를 만듭니다 stop().
  2. new BitmapData영화 클립과 폭과 높이가 같은 객체를 만듭니다 .
  3. 사용 무승부 () 의 BitmapData에 무비 클립을 렌더링하는 방법을.
  4. BitmapData 객체를 배열 또는 벡터에 저장합니다.
  5. MovieClip의 다음 프레임으로 이동하여 2-4 단계를 반복하십시오. MovieClip의 마지막 프레임에 도달 할 때까지이 작업을 수행하십시오. MovieClip 프레임 의 최대 너비최대 높이 로 두 개의 변수를 업데이트하는 것이 좋습니다 (프레임마다 다를 수 있으므로).
  6. 이제 저장된 모든 BitmapData 객체를 Sprite-Sheet에 결합 할 수 있습니다 ( BitmapData.copyPixels () 사용 ).

3. 스프라이트 기반 애니메이션

첫 번째 질문에 대한 답변에서 언급했듯이 그것에 대한 명확한 대답은 없습니다. 예를 들어 객체로 많은 변형을 수행해야하는 경우 스케일링회전 플래시 네이티브 렌더러를 사용하면 더 나아질 것입니다. 당신이있어 경우 (수동 또는 동적) - 시트를 스프라이트 구운 할 수 있습니다 애니메이션을 미리 정의, 그리고 동시에 스프라이트의 수백을 표시해야하는 경우, 다음 비트 맵 렌더링 엔진 이동합니다.


플래시가 렌더링에 하드웨어 가속을 사용하여 시작하는 경우 copyPixel 렌더러는 기본 렌더러보다 느릴 수 있습니다.
Bart van Heukelom

6

스프라이트를 사용하여 래스터 기반 게임을 제작하는 경우 BitmapData를 사용하여 사용자 지정 렌더링 솔루션을 작성하십시오. 벡터 기반 게임을 제작하는 경우 MovieClips를 사용하여 내장 애니메이션 메커니즘을 사용하십시오.

사용자 정의 렌더링 솔루션을 작성하는 경우 ActionScript 만 사용하여 Flash에서 자신을 분리하여 필요한 작업을 수행 할 수 있습니다. flixel 엔진은 이 방법을 사용하고 꽤 좋은 데요. 그래도 처음부터 내 엔진을 작성하는 것을 선호하지만 아이디어를 얻습니다.

내장 된 Flash 애니메이션 메커니즘을 사용하면 라이브러리 에셋을 MovieClips로 쉽게 만들고 필요에 따라 ActionScript에서 인스턴스화 할 수 있으므로 벡터 기반 게임에 가장 적합합니다. 무비 클립에 제공된 타임 라인을 사용하여 애니메이션을 처리하고 그에 따라 스프라이트의 위치를 ​​이동합니다. 모든 BattleOn! Adventure Quest Worlds와 같은 게임은이 방법을 사용합니다. 좋아 보인다.

마지막 질문은 벡터 애니메이션에 MovieClip 클래스 대신 Sprite 클래스를 사용하는 것을 말하는 것으로 가정합니다. Sprite는 타임 라인이없는 MovieClip이므로 애니메이션 관리의 편의성을 잃게됩니다.


3

블리 팅이 더 빠르다는 것이 일반적으로 믿어 지지만,이를 입증하는 벤치 마크는 보지 못했습니다. 일부 개발자는 플래시를 일반적인 가상 머신으로 취급하고 렌더링 자체를 제어 할 수 있기 때문에 블리 팅을 선호합니다. 그러나 내장 표시 목록 (내가하는 것)이 마음에 들면 Flash는 행복하게 이동, 크기 조정, 회전하고 수백 개의 화면상의 DisplayObject (예 : MovieClips, Sprites, Bitmaps)에 뛰어난 효과를 적용하여 높은 프레임 속도로 적용 할 수 있습니다. 크기가 아주 작은 경우 (예 : 각각 200x200 픽셀 미만) 벡터를 사용하지 않고 MovieClip을 사용할 수 있습니다. 대부분의 게임은 사용하는 시스템에 관계없이 비트 맵 자산을 사용합니다. 그러나 특히 픽셀 아티스트가 아닌 Flash 전문가 디자이너와 함께 작업하는 경우 타임 라인에서 비트 맵 자산을 레이아웃하고 애니메이션을 적용하는 것이 유용한 경우가 있습니다. 스테이지 품질을 낮음으로 설정하면 추악한 변환을 희생하면서 성능이 훨씬 향상됩니다. Flash는 화면에서 벗어난 객체를 렌더링하지 않으므로 속도가 느려지지 않습니다.

스크롤 수준이 높거나 시차 레이어가 많은 경우와 같이 Flash가 느려질 수있는 곳은 매우 큰 비트 맵을 이동하고 변형하는 것입니다. 오프 스크린 버퍼에서 배경을 블리 팅하면서 게임 오브젝트에 MovieClips를 사용하는 하이브리드 방식은 더 빠를 수 있으며 표준 스프라이트 및 MovieClip을 사용하기 쉬우면서도 무한히 큰 레벨을 유지할 수 있습니다.


복잡한 벡터 모양도 성능에 큰 영향을 줄 수 있습니다. 그라디언트가 많은 애니메이션 MovieClip이 있고 벡터 모양의 세부 수준에주의를 기울이지 않으면 비트 맵보다 훨씬 느리게 그려집니다.
bummzack

벡터를 사용하지 않고 MovieClip을 사용할 수 있습니다. 대부분의 게임은 사용하는 시스템에 관계없이 비트 맵 자산을 사용합니다. 그러나 특히 픽셀 아티스트가 아닌 Flash 전문가 디자이너와 함께 작업하는 경우 타임 라인에서 비트 맵 자산을 레이아웃하고 애니메이션을 적용하는 것이 유용한 경우가 있습니다.
Iain

플래시 게임의 경우 HUD 및 플레이어 스프라이트에 대한 몇 가지를 제외하고 각 프레임마다 플래시로 렌더링되고 벡터로 렌더링되는 모든 것에 그라디언트를 사용하지 않는 것이 좋습니다. 그라디언트는 성능을 빠르게 먹습니다.
AttackingHobo

일부 렌더링 및 업데이트 벤치 마크 : 8bitrocket.com/2007/12/23/…
Max Dohme
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.