首先,我的环境。我的问题是,是否可以使用Flash Professional而不是Flex,FlashBuilder等(我目前没有这些环境)。
这就是:我们有几个带有Document Class的.fla文件。带有该类的.as文件与所有这些.fla文件共享,因此它们都具有与其Document类相同的类集。关键在于,因为Class被编译到每个生成的.swf文件中,因此对Class所做的任何更改都需要重新编译所有.fla文件。
经过一番研究后,我发现了RSL。但我想知道是否可以将该类作为RSL,同时将其作为每个文件的文档类?它会缓解一些问题,因为如果需要在类中进行更改,我们就不需要重新编译每个文件,也不需要重新生成每个.swf文件。
另外,如果有可能,我如何通过Flash Professional实现RSL?我找到的所有文档都通过Flex和其他文档显示。
如果我不够清楚,请告诉我。
答案 0 :(得分:1)
不可能,RSL仅用于运行时共享,而不是用于访问类所需的编译时共享。
首先,一个类在大小方面没那么多,所以不需要在swfs之间使它成为一个独特的共享。
现在您确认如果进行任何更改,则必须重新编译所有swfs,但这实际上并不准确,因为在一个给定的运行时中只能存在一个类定义。默认情况下,第一个swf运行是加载类定义的,下面所有加载的swfs默认都会丢弃它们的类定义,所以你不必在理论上重新编译它们。
因此,要恢复是,如果对类进行重大更改,则必须重新编译所有swfs,但不能进行微小更改。但是这种情况对您的应用程序设计来说可能是最有效和最合理的。
答案 1 :(得分:1)
如前所述,您不能将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项目中,转到&#39; 高级操作脚本设置&#39; (单击下面的扳手图标&#34; Actionscript 3.0&#34;在发布设置中)。
单击库路径选项卡,单击加号按钮,然后单击&#34; 浏览到SWC文件&#34;按钮(目前它是带闪光灯的图标,其中包含f&#39;)。找到上一步中的swc文件。
现在,突出显示新条目,单击信息图标(链接选项)。将其改为&#34;合并为代码&#34;到&#34; RSL&#34;。然后添加一个swf文件的路径(运行此应用程序时的位置)。
现在,在您的应用程序中,您可以引用RSL中的类。所以,如果我们这样做:
trace(TestyMcTestFace.go());
你应该得到输出&#34;我是Testy McTestFace&#34;。
FlashPro会自动为您加载RSL。但请注意,如果您不允许Flash自动预加载您的应用,则无法立即使用。
如果您从第一步更改并重新导出了swc / swf,那么当您再次运行现有的swf时(无需重新编译),应反映这些更改。
注意事项:
小心RSL中的代码。碰撞课程很容易。作为最佳实践,只需将完全独立/解耦的代码放入RSL中。应避免使用大量导入的代码。如果您在编译的swf中没有引用具有相同名称的类,那么您最好加载RSL。
另请注意,如果不是来自同一个域名,RSL可能会有sanbox /安全限制。