Flash - 管理大型项目

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flash - 管理大型项目相关的知识,希望对你有一定的参考价值。

我们使用Autodesk Scaleform进行原型设计,并使用Flash构建我们的游戏UI。我们需要能够与3-4名艺术家和10多名程序员组成的团队开展一个大型项目。我们使用Perforce源代码控制系统来存储所有代码和资产。我们需要能够管理具有多个共享资源的项目以及处理屏幕和控件的多个人(艺术家和程序员)。

我们的问题如下:

我们希望能够创建蒙皮图形自定义组件,例如按钮,滑块,复选框以及更复杂的控件,例如表格和游戏特定元素。我们希望能够在单个位置共享图形资源,并允许多个艺术家和编码人员同时处理共享组件。我们需要将所有这些存储在Perforce源代码控制存储库中。

对于AS3代码,这一切都非常简单。它像任何其他代码库一样工作,我们已经设置了FlashBuilder和FlashDevelop项目。

现在,选项似乎如下:

  • 创建一个Flash项目或项目。这里的问题是所有资产都被复制到AuthortimeSharedAssts.fla中。这意味着,由于FLA是二进制格式,因此我们的源代码控制不允许多个人同时编辑任何共享资源。
  • 设置手动authortime共享。这将允许在多个共享组件上工作,因为个人可以更新一个小的离散FLA文件,这将自动更新更大的共享库。问题是,这不允许共享图形资产,这意味着,如果艺术家更新图形,则不会过滤到单个Flash文件。
  • 使用XFL格式。这将允许我们在签入源控件时合并文件,因为它们是纯文本,并且它将单个资源保存为单独的文件,看起来很完美。问题是我无法看到如何创建一个完全使用XFL文件的项目(即制作类似AuthortimeSharedAssets.xfl的项目)。

目前,我看不到在Flash中运行大型项目的任何明显,明智的方法。我们不能成为第一个做这种事情的人。

任何人都可以帮助或解释我们应该怎么做吗?

答案

我会说XFL会成为这么大团队的方式,特别是在使用源代码控制时。

据我所知,XFL的大多数符号在LIBRARY文件夹中保存为.xml。如果它们是导入的jpgs或其他位图,那么实际的图像文件也会保存在那里。

我无法嵌入字体并以此格式保存,但这可能是一个很大的问题,具体取决于您正在做什么。解决方法是动态加载字体,如discussed here。这可能会给您的设计师带来轻微的不便,但当您考虑使用XFL格式获得的内容时,如果项目涉及的人数太多,则需要付出很小的代价。

我还建议预编译(制作组件)项目的某些部分。

我希望有所帮助。

另一答案

这对您的团队来说可能不是一个选择,但我会建议(因为我的经验)一个非常成功的项目管理方法。

在制定像这样的大型部门基础设施选择时,进入杂草并看到你想要阻止的问题是值得的。那就是说,请在这里解释我的解释。

您遇到的主要障碍是:1)锁定和编辑无法合并的大型FLA文件; 2)防止MovieClip和这些文件中的类的重复/版本冲突。冲突可以是authortime冲突(具有来自authortime共享库的过时库符号的FLA)或运行时冲突(使用相同类的冲突版本编译的SWF,导致运行时崩溃)。

根据我的经验,解决方案是1)在二进制文件(FLA)中尽可能少地编写代码,2)尽可能在进程的后期将类代码绑定到MovieClip,并且3)编写应用程序代码来执行这种“后期约束”优雅。这意味着使用运行时库而不是authortime库。为了合并,我不打算尝试将二进制文件视为文本的解决方案;相反,最小化并隔离它们在代码中扮演的角色FLA。让他们分开。

如果可能,我会建议您的团队使用以下策略:

  1. 在您的制作(非库)FLA中,使用“view”MovieClips。 “视图”剪辑都是艺术和动画;它们没有类绑定和尽可能少的代码。例如,您的艺术家可以通过与BouncingBall.as的链接向舞台添加BouncingBall符号,而是添加没有链接的BouncingBallView(生成的类名BouncingBallView与基类MovieClip)。
  2. 在库SWF(可以是纯AS)中,编写Mediator类以包围这些视图。调解器在运行时“包装”View剪辑的实例,将视图对象的属性暴露给应用程序的其余部分,并有效地充当库类链接。例如,您可以编写BouncingBallMediator.as而不是BouncingBall.as,并且在Mediator类中,您可以将所有应用程序逻辑用于弹跳球。
  3. 设置应用程序以在运行时加载所有类(如BouncingBallMediator)的SWF库。然后,当舞台上出现BouncingBallView实例时,您的应用程序将创建一个新的BouncingBallMediator实例并将BouncingBallView对象分配给它。这成功地将视图(MovieClip库符号)与其控制逻辑(在BouncingBall.as类文件中)分离。这样做可以处理将类链接到FLA文件的麻烦行李。

这种方法有许多好处,但简而言之,它允许您的开发人员和您的艺术家独立工作,而不必担心类和艺术文件之间的版本控制冲突。艺术家从不使用具有代码的FLA,开发人员可以控制他们所需的控制,以最大限度地减少SWF中重复/冲突的类定义的可能性。每个人都可以更专注于他们最擅长的事情。

我用这种方法工作的项目往往进展顺利,只要方向舵的主导开发人员解决我正在讨论的解耦策略。为超级冗长的回应道歉; HTH。

另一答案

我不能推荐Authortime Sharing,因为我无法使用项目中几个swc的所有组件。原因是经过几天的调查相当奇怪。

当使用authortime共享组件(例如,按钮)并且共享组件具有实例名时,至少一个组件(例如,对话框)总是抛出类型错误。只要您没有为通过actionscript链接的组件中的共享组件分配任何实例名,并在项目中稍后实例化,一切都可以正常工作。

目标是将一个巨大的* fla拆分成几个较小的,在authortime共享资源,因此在拆分的较小fla和编译器(不是运行时!)之间共享更改不会复制这些类。即使在大规模使用actionscript-linking和自定义基类时,这也很有用。 (deactivate会自动声明阶段实例)编译器成功排除了共享导致的所有重复类。您可以轻松查看每个包含的swc。

要简单地重现问题,你必须制作2个fla。每一个都有一个movieclip(例如一个对话框)和一个共享的。 (例如,一个按钮;一个fla与另一个fla共享按钮)。分配所有组件actionscript-linkage。将按钮放在每个对话框上,并为每个按钮分配一个实例名称。将fla和sws编译为swcs,将它们包含在项目中并尝试实例化两个对话框。其中一个将抛出#1034类型强制错误。删除(其中一个)按钮实例名称,它将起作用。

要获得一个印象 - heres a screenshot(全尺寸):

我的猜测是,只要没有设置instancename,flash就不关心按钮的实际类型,并将其视为movieclip,但是当设置了instancename时,播放器会将movieclip强制转换为指定的类型。但由于某种原因,不会查看整个命名空间(?),而只是在swc中编译对话框。我得出结论,因为当按钮编译成swcA而不是swcB时,来自swcA的对话框可以工作但是不是来自B的对话而是相反。你可以通过重新编译你想要按钮所在的fla来“强制”按钮来交换swc。

我还让它在极少数情况下运行,只涉及2个fla / swc。但不知道为什么。也许我会进一步调查,但我已经浪费了相当多的时间。

我希望你找到一个好的解决方案(并发布它:P),因为我们遇到了和你一样的问题。


€:如果您还更新了共享组件一次,则似乎会出现错误(仅?)

€:仅当你导出swc而另一个带有共享组件的fla打开时(??)

另一答案

我现在遇到的问题几乎和你一样!我正在开发一个游戏,它将所有图形资源放在一个巨大的FLA文件中,并导出为SWC库。我的问题是我们想要将这个巨大的文件分成几个较小的文件,然后为每个新屏幕创建新的FLA文件。

我们使用RSL在不同的FLA文件之间共享资产。例如。 fonts.fla在库中导出三种用于运行时共享的字体。 graphic_hsl.fla包含高分列表图形并导入了fonts.swc以进行运行时共享。您应该考虑RSL,因为它们使您能够在一个文件中编辑图形资源,并且无论您在其他FLA文件中使用它,它都会自动更新。

我们尝试使用XFL文件格式,但最后我们切换回FLA,因为版本控制对XFL并不是很有用。它具有非常复杂的结构,同时从两台不同的计算机上更改文件几乎可以解决问题!所以没有与SVN,Git或任何你正在使用的东西合并!

另一答案

还有更多的选择。我不是说他们更好,但是,取决于你的团队以及你可以投入多少资金开发自己的开发工具......好吧,这里是SWFMill到Haxe的一个端口:http://code.google.com/p/hxswfml/。这允许将图形资源表示为文本(XML)文件。也许有可能为Incscape添加插件以将图形导出为这种格式......然后我认为these folks有自己的格式和工具来管理视觉材料。 Flex SDK编译器实际上可以将SVG正确地转换为闪存图形。

最后,我调查的最有可能的选择是,我有足够的时间,是FXG格式。 Flex编译器可以编译它,但是,它仍然需要一些修补来从FXG中删除所有与Flex框架相关的垃圾。然而,FXG的好处是像Photoshop,Illustrator,Indesign等程序可以导出为这种格式。当然,这大多是未经测试的......在某些地方我担心FXG是为最近暂停的Adobe产品(Catalyst)而设计的。然而,格式本身有可能仍然是Adobe程序的交换格式 - 因此您不需要检查FLA。

我与图形艺术家合作的方式:我们从不检查FLA,而是检查SWC并规定任何从事项目工作的人都需要检查并导入。当多于一个人需要使用相同的符号时,这并没有真正帮助,但是,至少,它们都在一个地方并且可以同时工作,如果你正在编辑不同的东西(大多数情况都会发生)时间无论如何)。

以上是关于Flash - 管理大型项目的主要内容,如果未能解决你的问题,请参考以下文章

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

PyCharm开发Flash项目之蓝图构建

处理一个项目的多个版本的 Flash Builder 最佳实践

将项目从 ICCAVR 移植到 Atmel Studio 7.0 _flash 问题

大型it项目管理的六大风险管理

论大型信息系统项目的范围管理