1

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

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

4

5 回答 5

4

Flash Builder 和 Flash 各有各的用途。虽然从技术上讲,您可以使用 Flash 制作出色的应用程序并使用 Flash Builder 制作出色的动画,但这比使用合适的工具来完成这项工作要难得多。

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

于 2010-04-14T15:45:10.467 回答
2

这取决于您所说的“一样好”是什么意思。

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

对于其他效果,例如在屏幕上奔跑的足球运动员,您可能无法在 FB 中完成这些效果(如果有的话)。

于 2010-04-14T15:44:01.003 回答
2

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

它可以纯粹在代码中创建非常复杂的动画,但是对于角色动画之类的东西,没有什么比旧的时间线+一点洋葱皮更好的了。

于 2010-04-14T17:05:03.810 回答
0

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

另一方面,Flash Builder 是一个基于 Eclipse 的环境,专门用于编程/调试/分析/ui 布局——比如 VS、Eclipse 或 Netbeans:实际上并不是我所说的动画工具。但是您当然可以使物体移动/旋转等,并以 SWF 格式加载或嵌入动画。

文档在这里解释了如何在 Flex 中嵌入外部资产 - 包括 swfs:嵌入资产类型

于 2011-06-19T00:16:57.077 回答
0

动画在 Flash Builder 中更难实现,但总的来说,如果您正在设计一款游戏,我已经使用 Flash Builder 取得了巨大的成功。

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

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

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

带有动画的示例游戏,以及许多-许多精灵表。还使用名为Nape的物理引擎。结合起来,我能够为 iOS 和 Android 制作一款非常出色的 Flash 游戏。游戏名为《越野国度》 。

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

        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;

        }
    }
于 2015-05-07T15:43:33.900 回答