Flash游戏的渲染性能


11

我当时正在阅读有关本机Flash渲染与构建自定义BitmapData帧缓冲区的信息,其中一些答案有些矛盾,所以我想知道:

  1. 通常是走定制Bitmap缓冲区路线的最佳实践,还是将渲染留给Flash引擎?
  2. 如果您使用矢量动画(MovieClips)而不是精灵,这是否会改变上述答案?
  3. 如果是这样,使用基于Sprite的动画是最佳实践吗?

(如果有任何区别,我的目标是Flash 10)

Answers:


14

1.没有通用的最佳实践。

如果你得到了很多(复杂形状)的元素,颗粒等在你的游戏中,位图缓存方法将是快。随着子画面的复杂性增加,位图缓冲区也将更好地缩放。使用更复杂的形状或补间(形状补间)动画时,矢量渲染器变慢,但是它还有其他一些好处:

  • 您可以自由缩放资产,甚至可以放大场景而不会降低质量。
  • 旋转或其他类似倾斜的变换将更容易在矢量图形上执行

因此,总而言之,可以归结为您要构建哪种游戏。

2.使用MovieClips代替位图精灵表

我猜你的意思是“位图精灵表”而不是AS3 Sprite类?

确实,这没有什么区别。您始终可以将基于MovieClip的动画转换为动画位图。通过将影片导出到帧并将其转换为sprite-sheet进行手动操作,或者通过在运行时从MovieClip渲染Sprite表进行动态操作。这是我的处理方式:

  1. 创建一个MovieClip及其实例stop()
  2. 创建一个new BitmapData与Movieclip具有相同宽度和高度的对象。
  3. 使用draw()方法将MovieClip渲染为BitmapData。
  4. 将BitmapData对象存储在数组或向量中。
  5. 转到MovieClip的下一帧,然后重复步骤2-4,直到您到达MovieClip的最后一帧为止。用MovieClip帧的最大宽度最大高度更新两个变量也是一个好主意(因为它们可以在帧之间变化)。
  6. 现在,您可以将所有存储的BitmapData对象组合到一个Sprite-Sheet中(使用BitmapData.copyPixels()

3.基于精灵的动画

如您对第一个问题的回答中所述,对此没有明确的答案。如果您需要对对象执行很多转换,例如。缩放旋转使用Flash本机渲染器可能会更好。如果您获得了可以(手动或动态)烘焙到Sprite-sheets的预定义动画,并且需要同时显示数百个Sprite ,请使用位图渲染引擎。


当(if?)Flash开始使用硬件加速进行渲染时,copyPixel渲染器可能会比本地渲染器慢。
Bart van Heukelom

6

我想说的是,如果您要使用精灵构建基于光栅的游戏,请继续使用BitmapData构建自定义渲染解决方案。如果要构建基于矢量的游戏,请使用通过MovieClips使用的内置动画机制。

如果要构建自定义渲染解决方案,则仅使用ActionScript就能使自己与Flash脱离关联,从而完成所需的工作。该flixel引擎使用此方法,它是相当不错的。虽然我更喜欢从头开始编写自己的引擎,但是您明白了。

内置的Flash动画机制最适合基于矢量的游戏,因为您可以轻松地将库资源创建为MovieClips,然后可以根据需要在ActionScript中进行实例化。您可以使用影片剪辑提供的时间轴来处理动画并相应地移动精灵的位置。所有的BattleOn!Adventure Quest Worlds等游戏使用此方法。看起来也不错。

我假设您的最后一个问题是针对矢量动画使用Sprite类而不是MovieClip类。Sprite是没有时间轴的MovieClip,因此您将失去为您管理动画的便利。


3

尽管通常认为发声会更快,但我还没有看到任何基准可以证明这一点。一些开发人员只喜欢blitting,因为它使他们可以将Flash视为更多的通用虚拟机,并控制渲染。但是,如果您喜欢内置的显示列表(我喜欢这样做),Flash可以在高帧频下愉快地移动,缩放,旋转并向数百个屏幕DisplayObject(例如MovieClip,Sprite,Bitmap)应用漂亮的效果,因此只要它们的尺寸很小,例如每个像素小于200x200像素。您可以不使用向量就使用MovieClips。大多数游戏将使用其所使用的任何系统使用位图资产。但是有时在时间轴上对位图资源进行布局和动画处理很有用,尤其是在与Flash专家设计人员而不是像素艺术家合作的情况下。通过将舞台质量设置为LOW(低),您将获得更好的性能,但会牺牲较丑陋的变换。Flash不会渲染任何不在屏幕上的对象,因此它们不会使您减速。

Flash可能变慢的地方是移动和转换非常大的位图-例如,如果您的滚动级别非常大或视差层很多。将游戏剪辑使用MovieClips并从屏幕外缓冲区中抽出背景的混合方法可能会更快,并且可以使您拥有无限大的关卡,同时仍然易于使用标准Sprites和MovieClips。


复杂的矢量形状也会对性能产生重大影响。如果您获得了带有许多渐变的动画MovieClips,并且您不注意矢量形状的细节水平,则绘制速度将比位图慢得多。
bummzack 2010年

您可以不使用向量就使用MovieClips。大多数游戏将使用其所使用的任何系统使用位图资产。但是有时在时间轴上对位图资源进行布局和动画处理很有用,尤其是在与Flash专家设计人员而不是像素艺术家合作的情况下。
伊恩

是的,对于Flash游戏,我建议不要对要向量化并通过Flash在每一帧进行渲染的任何东西使用渐变,除了HUD和播放器精灵上的一些东西。渐变会影响性能。
AttackingHobo 2010年

一些渲染和更新基准:8bitrocket.com/2007/12/23/…–
Max Dohme
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.