【问题标题】:How do i create an animation in AS3?如何在 AS3 中创建动画?
【发布时间】:2015-02-01 02:23:27
【问题描述】:

我正在为学校项目(使用 AIR api)在 AS3 中制作游戏。我在 AS3 方面有大约一年的经验,所以我会说我精通但不是专家。无论如何,我从未尝试在 AS3 中制作精灵动画,我不太确定如何处理它。

如果我创建一个位图列表并调用 addChild() 和 removeChild() 来显示动画的每一帧,它会影响帧率,因为这些函数效率不高(我之前尝试过,但它降低了我的帧率如果我一次有太多动画)。我也尝试过创建一个 BitmapData 对象列表,将位图添加到显示列表中,然后将其指向每帧不同的 BitmapData,但这似乎根本不起作用。

那么最好的方法是什么?例如,在 XNA 中,我将创建一个使用 sprite 批处理绘制到屏幕的 sprite 类,然后我将创建一个 sprite 对象列表并在它们之间循环以创建动画。有什么方法可以在 actionscript 中实现类似的结果?

【问题讨论】:

  • 使用一个位图在 BitmapDatas 中循环有什么问题?自从我完成 AS3 以来已经有一段时间了,但我没有看到不这样做的明显理由。
  • @31eee384 显然他已经在该位图或该位图的任何父项上设置了cacheAsBitmap,这会破坏基于位图的动画。
  • @31eee384 我确实找到了一种让它工作的方法,我只需要在创建位图对象后立即设置位图数据,然后再尝试更改任何属性。

标签: actionscript-3 animation flashdevelop


【解决方案1】:

第一种(简单)方法:您可以只使用多帧MovieClip 制作动画。在每一帧中放置一个图像,在舞台上放置一个 MovieClip,仅此而已。您可以使用 play()、stop()、gotoAndPlay()、gotoAndStop() 来控制此动画。对于通用平台游戏来说,它可以毫无问题地工作(我很久以前就这样做了)。

第二种(高级)方法:使用位图blitting。对于每个动画,创建一个位图图像来保存动画的每一帧。将此图像用作将像素复制到当前动画对象的源。您只需在源位图中复制与当前帧相对应的特定矩形区域。

实际的blitting发生在这里

destinationBitmapData.copyPixels(sourceBitmapData, areaRectangle, destinationPoint);

destinationBitmapData 是您要传送到的“画布”; sourceBitmapData 是保存所有动画帧的源图像; areaRectangle 是源图像内的 Rectangle 定义要复制的区域; destinationPoint 是画布中复制区域的左上角坐标。

目标画布可以只是一个小对象(例如四处移动的游戏角色),也可以是包含所有对象的整个游戏屏幕。 IE。无需单独对每个对象进行 blitting 和添加,您可以只使用一个大画布并将任何必要的部分直接 blit 到它。

也就是说,已经有许多现成的引擎使用 blitting 甚至高级技术,例如 2D 精灵的 3D 加速。

其中一个是Starling

【讨论】:

  • 至于第一个解决方案,我正在使用纯动作脚本在 flashdevelop 中工作,所以我无法使用 flash 做任何事情。第二种解决方案可能有效,所以我可能会尝试。至于八哥,我听说过它的好消息,但我已经进入这个项目好几天了,现在不能改变一切。
  • 我也使用 FlashDevelop,但我在 Flash IDE 中创建了所有需要的影片剪辑,然后将它们发布为我包含在 FD 项目中的 SWC 库。 Flash 中没有代码,只有图形。
猜你喜欢
  • 1970-01-01
  • 2012-07-21
  • 2010-11-14
  • 2011-07-18
  • 2021-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多