大型Flash/AS3项目的工作流程

Ben*_*hug 4 flash workflow user-interface actionscript-3 flash-cs6

我目前正在开发一个相当大的UI重型Flash游戏.我们的团队现在已经为此工作了大约9个月.我们都没有任何以前的Flash经验,因此我们在此期间不断改进我们的工作流程.但是,我们仍然觉得我们现在所做的并不是最佳的,特别是编码员和艺术家之间的界面,所以我想知道其他团队是如何工作的.

理想的工作流程应满足以下要求:

1.重用的UI元素只定义一次

这意味着,如果我们想要更改字体或按钮样式,我们不希望通过所有菜单并手动更改它们.我们希望它们在一个中心位置定义,并且仅从那里引用.如果资产不仅在编辑时共享,而且在运行时共享,即它们仅被下载一次,则会获得奖励积分.

2.一切都按需加载

目前,我们有两个不同的加载步骤:首先,我们加载菜单库.完成后,玩家可以与所有菜单进行交互.然后,我们开始加载实际的游戏数据.但是,初始加载时间仍然太长,导致我们失去许多潜在的参与者.我们真正想做的是只加载主菜单所需的最低限度,然后仅在播放器尝试实际打开相应菜单时加载其他所有内容.Zuma Blitz做得非常好.

没有编码员的帮助,艺术家可以进行微小的改变

如果在不改变实际功能的情况下重新设计菜单,艺术家应该可以在Flash CS6中自行完成.这需要在艺术和代码之间建立清晰的界面,艺术家也应该可以在将更改发送给编码人员之前对其进行测试和调试.

-

我们当前的工作流程如下所示:艺术家在Flash CS6中将屏幕构建为MovieClip并将其导出为SWF.在代码端,从屏幕SWF加载MovieClip,并将它们用作基于PureMVC的系统中的View类.Mediators按实例名称访问视图中的文本字段等元素.

这很容易出错,因为没有中心位置来定义接口(即实例名称).编码器和艺术家之间需要大量的通信开销.此外,它还会在代码和动画片段的内部结构之间创建依赖关系.当艺术家想要对其应用某些效果时,他们无法将文本字段附加到不同的子动画片段.

我们正在尝试使用基于事件的界面,该界面要求艺术家向movieclip添加几行代码.这比以前更不易出错且相互依赖,但除非我们编写额外的测试和调试工具,否则它仍然不能完全满足(3).这一定是一个常见的问题,我很难想象没有更简单的方法.

对于(2),我们也开始构建一个自制的解决方案,但同样,这是一个常见的任务,必须有一些我们可以使用的东西.

那么,有经验的Flash开发人员如何管理这样的大型项目?

Amy*_*hip 5

我有一些想法,但它们是基于我的编码风格,这对我来说是独一无二的.

1.重复使用的UI元素的定义只有一次
根据什么你打算重用,这点可以定义库时符号,并只用那么简单.可以在不进行搜索和替换的情况下替换字体,也可以在字体嵌入菜单中简单地换出字体.

要在xfl中共享,您可以使用Flash Pro项目.请记住,这涉及到一定的时间开销(文件在打开或保存时需要更新,Flash会因为项目而崩溃,尝试处理来自的两个文件可能是一个坏主意.同一个项目一次).

有些人使用swcs,但这样做需要您在代码中实例化其中的内容,这可能对您的工作流程无效.我只将它们用于音频,我发现它中的对象必须在你指定为AS编译帧的帧之前或之前编译,否则声音无法正确实例化.我怀疑从swc实例化的任何事情都是如此.

2.按需加载所有内容
Flash保存最好的秘密之一是使用编译器的时间表和受过教育的使用,这很容易实现.以下是它的工作原理:

如果您的ActionScript编译框架是一个大于1的框架,那么以下是编译的方式:

  • 在第1帧之前:
    • 第1帧使用的任何视觉资产和嵌入声音
    • 您的主文档类,以及直接从文档类引用的任何类(这是编写接口的一个很好的理由)
  • 在AS编译框架(N)之前:
    • 您的AS类(代码,不一定是视觉/音频资产)
    • 任何库符号的视觉和音频资产设置为在帧N中为AS导出(即使它们未在swf中使用)
  • 在资产首次在时间轴上使用的框架之前:
    • 所有库符号中的视觉/音频资产,其中检查第N帧中的AS导出.

如果你在第1帧上放置一个微调器加载图形并且你选择了第10帧作为导出帧,那么如果你让电影播放直到它到达第10帧,那么它将如何加载:

  • 如果您的微调器中有任何重型资产或在主文档类中直接引用,则用户将在下载此内容时看到空白屏幕
  • 旋转器将变得可见并旋转
  • 加载AS类后,将库符号设置为第10帧中的导出以及实际位于第 10帧的资产,您将看到这些资产,并且您需要使用它们的所有内容都已准备就绪.
  • swf的其余部分将继续在后台加载,更新framesLoaded.

我实际上使用了第10帧对象的setter组合,加上一个ENTER_FRAME处理程序来检查我们是否还在第10帧.有些事情我必须做的更容易基于一个和其他更好地做其他方式.

3.艺术家可以在没有编码人员帮助的情况下进行微小更改
如果代码全部在库符号的基类中,则艺术家不需要理解它,只要他们不删除或更改所需的实例名称.我尝试通过观察ADDED_TO_STAGE(捕获阶段)和按类型观察显示对象来最小化对实例名称的依赖.一旦我引用了相应类型的对象,就可以很容易地监视REMOVED_FROM_STAGE该对象以取消引用它.这类似于RobotLegs和Swiz等框架的工作方式.

此外,我使用了一个名为"语义闪存"的概念,我根据标签做了很多工作.我有一个基类FrameLabelCip,它具有内置的nextLabel()和previousLabel()功能,以及调度FRAME_LABEL_CONSTRUCTED事件.从故事板事件名称到Flash标签名称非常容易,只需构建图形bang-bang-bang.

我大量使用Graphic Symbols来跨多个标签同步图形(例如,项目符号列表),而不是依赖于代码.这个动画师的诀窍使这些东西既健壮又容易接近技术水平较低的队友.