是否可以在Flash Builder中创建(好的)Flash动画?

时间:2010-04-14 15:39:43

标签: flex flash adobe flash-builder

我知道所有很酷的动画都是在Flash(程序)中创建的,不幸的是,我对它并不是很好。但是我喜欢flash builder,因为你可以使用标记语言,因为它更适合大型项目。

您可以创建在Flash Builder中同样出色的动画吗?

5 个答案:

答案 0 :(得分:4)

Flash Builder和Flash各有其适当的用途。虽然从技术上讲,你可以使用Flash在Flash Builder中制作出色的应用程序,但是比使用适当的工具要困难得多。

如果您只想以编程方式在屏幕上移动一些精灵,Flash Builder就可以正常工作。如果你想要在视觉上构建更复杂的东西,那么使用Flash会更容易,更好。

答案 1 :(得分:2)

这取决于你的意思“好”。

某些动画,如过渡和对象移动(树节点打开/关闭等),可能非常复杂,实际上更容易以编程方式进行。

对于其他效果,比如在屏幕上跑步的足球运动员,你可能无法做好,如果有的话,在FB中。

答案 2 :(得分:2)

看看一个比较流行的补间引擎TweenLite:http://www.greensock.com/tweenlite/

它可以纯粹在代码中创建相当复杂的动画,但是对于像角色动画这样的东西,没有什么比旧的时间线+洋葱皮更好了。

答案 3 :(得分:0)

真的,如果您想手动制作动画,而不是以编程方式制作动画,Flash就是答案。给他们两个旋转。他们一起工作得很好。你可以在Flash中编程,但在那个区域有点弱。自从我上次使用它以来,情况可能有所改善。 Flash的优势在于实际创建图形和动画。

另一方面,Flash Builder是一个基于Eclipse的环境,专门用于编程/调试/分析/ ui布局 - 比如VS,Eclipse或Netbeans:不是我所谓的动画工具。但是你当然可以移动/旋转等东西,并以SWF格式加载或嵌入动画。

文档解释了如何在Flex中嵌入外部资产 - 包括swfs:Embedding Asset Types

答案 4 :(得分:0)

动画在Flash Builder中更难实现,但总体而言,如果您正在设计游戏,我在Flash Builder中取得了巨大成功。

我建议使用Starling Framework,因为它提供了许多本机补间,用于实现屏幕资源的移动,以及淡入淡出,着色,旋转和所有类型的补间翻译(从线性到弹跳效果)。如果你想进一步的精灵操作,有几个选项。最流行的(Starling有演示)是使用Movie Clips逐帧动画。在这里,您可以逐帧更新图形以进行多次迭代,使其看起来好像是动画的。你需要一位优秀的艺术家。

您对此的实施将由您需要设置动画的资产数量来定义。移动设备的GPU堆空间非常有限,因此您必须仔细选择要加载的图像资源。在您渲染的每个场景中使用单个精灵表将有助于控制您的记忆。 Texture Packer是一个很好的工具,可以与Starling很好地配合使用。我喜欢使用精灵表,因为它们很容易为每个场景更新(纹理打包器真的很好地将它们挤压在一起)而且你只需要管理一个资产而不是数百个单独的精灵。 Texture Packer生成一个XML文档,Starling引擎可以读取该文档并提供对每个项目的访问。最重要的是,你以这种方式重用纹理。因此,精灵表中具有相同参考图像的两个按钮在内存中共享相同的图形资源。这也为您的应用程序带来了良好的减速效果。读取单个精灵表比打开与数百个图形资产的连接更快。

我过去做过的并且目前取得了巨大成功的是有两种类型的精灵表。动态和静态。静态精灵表在游戏首次打开时加载并包含游戏将在所有场景中使用的艺术作品。这个精灵表通常很小,但有游戏徽标和其他必需的图稿。为每个游戏场景加载动态精灵表。它们为需要它们的每个场景加载和卸载。

带动画的游戏示例和许多精灵表。还使用名为Nape的物理引擎。结合我能够为iOS和Android制作一个非常好的Flash游戏。游戏叫做Offroad Nation

我的资产加载器中的一些示例代码。加载游戏中的每个场景时都会调用此函数。每个场景都是一个case语句,并列出了它所需的精灵表。首先进行内存清除,然后加载场景所需的页面。这需要几秒钟,是展示加载栏和广告的好地方。

        public function loader(e:AssetLoaderEvent):void{

        /**
         * remove all resources
         */
        this.purge();

        trace("Menu Code: ", e.menuCode);

        switch(e.menuCode){

            case C.ALE_OPENMAINMENUSCENE:
            case C.ALE_OPENGAMESCENE:
                this.addAtlas("atlas_gamescene");
                break;

            case C.ALE_DEVELOPERMENUSCENE:
                this.addAtlas("atlas_gamescene");
                this.addAtlas("atlas_leveleditor");
                break;

        }
    }