如何在AS3中创建动画?

时间:2015-02-01 02:23:27

标签: actionscript-3 animation flashdevelop

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

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

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

1 个答案:

答案 0 :(得分:1)

第一个(简单)方法:您可以使用多帧MovieClip进行动画制作。在每个帧中放置一个图像,将一个MovieClip放在舞台上,这就是全部。您可以使用play(),stop(),gotoAndPlay(),gotoAndStop()来控制此动画。它对于通用平台游戏没有太多问题(我很久以前就是这样做的)。

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

实际的blitting发生在这里

destinationBitmapData.copyPixels(sourceBitmapData, areaRectangle, destinationPoint);

其中destinationBitmapData就是你所穿的“画布”; sourceBitmapData是包含所有动画帧的源图像; areaRectangle是源图像中的Rectangle,用于定义要复制的区域; destinationPoint是画布中复制区域的左上角坐标。

目标画布可以只是一个小对象(就像你正在四处移动的游戏角色)或整个游戏屏幕上的所有对象。即而不是blitting并分别添加每个对象,你可以直接使用一个大画布并将任何必要的部分直接加到它上面。

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

其中一个是Starling