是否可以将链接到文档的类(也称为文档类)放入RSL中,并将其作为文档类



首先,我的环境。我的问题是,是否可以使用Flash Professional而不是Flex、FlashBuilder或类似的软件来实现这一点(我目前还没有这些环境)。


事情是这样的:我们有几个带有文档类集的.fla文件。带有该类的.as文件与所有.fla文件共享,因此所有这些文件都具有与其文档类相同的类集。重点是,由于Class被编译到每个生成的.swf文件中,因此对Class所做的任何更改都需要重新编译所有.fla文件。

经过一些研究,我发现了RSL。但我想知道是否可以将类作为RSL,同时将其作为每个文件的文档类?这将使事情变得简单,因为如果需要在类中进行更改,我们不需要重新编译每个文件,也不需要重新生成每个.swf文件。

另外,如果可能的话,我如何通过Flash Professional实现RSL?我找到的所有文档都通过Flex和其他工具显示了这一点。

如果我不够清楚,请告诉我。

如前所述,不能将RSL与文档类一起使用。但是,可以将类放在RSL中,并在运行时加载这些类,这可能会达到您想要的效果。

这里有一个非常简单的例子:


1.创建RSL资产:

假设您有一个不时更改的类,并且您希望在运行时加载它的功能:

//TestyMcTestFace.as
package  {
public class TestyMcTestFace {
public static function go():String{
return "I'm Testy McTestFace";
}
}
}

所以,你可以做的是,在FlashPro/AdobeAnimate CC中创建一个新的AS3项目。链接你的类文件,让你的项目找到它(在这种情况下,我只是把我的TestyMcTestFace.as放在我创建的新.fla的同一目录中)。

在时间线代码中引用要包含的类如果没有此引用,类将不会在生成的swc/swf中导出

因此,对于这种情况,我有一个新的AS3项目,在时间线的第一帧上只有一行:

TestyMcTestFace;

现在,转到您的发布设置,使其仅选中Flash(swf)SWC

发布这个新项目(您现在有了一个swf/swc,可以用作其他应用程序的RSL)。

2.将其他应用程序设置为将swf/swc用作RSL

在现有的flash项目中,转到"高级Actionscript设置"(单击发布设置中"Actionscript 3.0"旁边的扳手图标)。

单击库路径选项卡,单击加号按钮,然后单击">浏览到SWC文件"按钮(目前它是一个带有闪光'f'的图标)。从上一步中查找swc文件。

现在,突出显示您的新条目,单击信息图标(链接选项)。将其从"合并到代码"更改为"RSL"。然后向swf文件添加一个路径(当该应用程序运行时,它将位于其中)。

现在,在您的应用程序中,您可以引用RSL中的类。因此,如果我们这样做:

trace(TestyMcTestFace.go());

你应该得到输出"我是Testy McTestFace"。

FlashPro将自动为您加载RSL。不过要注意,如果你不让flash自动预加载你的应用程序,它就不会立即可用。

如果您从第一步更改并重新导出了swc/swf,那么当您再次运行现有的swf时,这些更改应该得到反映(无需重新编译)。


注意事项:

小心RSL中的代码。上课很容易发生冲突。作为最佳实践,只将完全独立/解耦的代码放入RSL中。应该避免有大量导入的代码。如果在编译的swf中不引用与加载RSL名称相同的类,也是最好的。

还要记住,如果RSL不是来自同一个域,它可能具有sanbox/安全限制。

不可能,RSL仅用于运行时共享,而不用于访问类所需的编译时共享。

第一件事是,一个类的大小并不大,所以实际上没有必要让它变得独特,也没有必要在swf之间共享。

现在您确认,如果进行任何更改,则必须重新编译所有swf,但这实际上并不准确,因为在一个给定的运行时中只能存在一个类定义。默认情况下,第一个运行的swf是加载类定义的swf,接下来所有加载的swf默认情况下都会丢弃它们的类定义,所以理论上不必重新编译它们。

因此,要继续"是",如果对类进行了重大更改,但没有进行小更改,则必须重新编译所有swf。但这种情况是你的应用程序设计的症状,可能不是最有效和最合乎逻辑的。

最新更新