Flash - 管理大型项目

时间:2012-01-24 14:15:19

标签: flash actionscript-3 actionscript projects-and-solutions

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

我们的问题如下:

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

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

现在,选项似乎如下:

  • 创建一个Flash项目或项目。这里的问题是所有资产都被复制到AuthortimeSharedAssts.fla中。这意味着,由于FLA是二进制格式,因此我们的源代码控制不允许多个人同时编辑任何共享资源。
  • 设置手动authortime共享。这将允许在多个共享组件上工作,因为个人可以更新一个小的离散FLA文件,这将自动更新更大的共享库。问题是,这不允许共享图形资产,这意味着,如果艺术家更新图形,则不会过滤到单个Flash文件。

  • 使用XFL格式。这将允许我们在签入源控件时合并文件,因为它们是纯文本,并且它将单个资源保存为单独的文件,看起来很完美。问题是我无法看到如何创建一个完全使用XFL文件的项目(即制作类似AuthortimeSharedAssets.xfl的内容)。

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

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

5 个答案:

答案 0 :(得分:1)

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

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

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

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

我希望有所帮助。

答案 1 :(得分:1)

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

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

您遇到的主要障碍是: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文件的麻烦行李。
  4. 这种方法有许多好处,但简而言之,它允许您的开发人员和您的艺术家独立工作,而不必担心类和艺术文件之间的版本控制冲突。艺术家从不使用具有代码的FLA,开发人员可以控制他们所需的控制,以最大限度地减少SWF中重复/冲突的类定义的可能性。每个人都可以更专注于他们最擅长的事情。

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

我不能推荐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(完整尺寸):

enter image description here

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

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

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


€:如果您还更新了共享组件一次

,则似乎会出现错误(仅?)

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

答案 4 :(得分:0)

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

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

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