首先是我的环境。我的问题是,是否可以使用FlashBuilder,而不是Flex、FlashBuilder等(我目前还没有这些环境)。
事情是这样的:我们有几个带有文档类集的.fla文件。带有该类的.as文件与所有这些.fla文件共享,因此它们都具有与它们的文档类相同的类集。问题在于,由于该类被编译到每个生成的.swf文件中,因此对该类的任何更改都需要重新编译所有.fla文件。
经过一些研究,我发现了关于RSLs的事情。但是,我想知道是否可以将类作为RSL,同时将其作为每个文件的文档类呢?这样可以轻松一些,因为如果需要在类中进行更改,我们就不需要重新编译每个文件,也不需要重新生成每个.swf文件。
另外,如果可能的话,我如何通过实现RSL?我发现的所有文档都通过Flex和其他文档显示了这一点。
如果我说得不够清楚请告诉我。
发布于 2016-05-20 22:10:20
如前所述,您不能在文档类中使用RSL。但是,您可以将类放在RSL中,并在运行时加载这些类,以满足您的需要。
下面是一个非常简单的例子:
1.创建RSL资产:
假设您有一个不时更改的类,并且希望在运行时加载它的功能:
//TestyMcTestFace.as
package {
public class TestyMcTestFace {
public static function go():String{
return "I'm Testy McTestFace";
}
}
}所以,您可以做的是在FlashPro/Adobe动画CC中创建一个新的AS3项目。将类文件链接起来,以便项目找到它(在本例中,我只是将TestyMcTestFace.as放在与我创建的新.fla相同的目录中)。
在时间线代码中添加一个引用到您想要包含的类(Es)。没有此引用的类将不会在结果的swc/swf.中导出。
因此,对于本例,我有一个新的AS3项目,在时间线的第一帧上只有一行:
TestyMcTestFace;现在,转到您的发布设置,使它只检查闪存(swf)和SWC。
发布这个新项目(您现在可以使用swf/swc作为其他应用程序的RSL )。
2.将其他应用程序设置为使用swf/swc作为RSL.
在现有的flash项目中,转到"Actionscript“(单击发布设置中接下来的”Actionscript 3.0“扳手图标)。
单击“库路径”选项卡,单击“加号”按钮,然后单击“浏览到SWC文件”按钮(当前它是一个具有flash 'f‘的图标)。找到上一步中的swc文件。
现在,在突出显示新条目之后,单击info图标(链接选项)。将其从“合并到代码”更改为"RSL“。然后向swf文件添加一个路径(当这个应用程序运行时它将在其中)。
现在,在您的应用程序中,您可以从RSL引用类。所以如果我们这样做:
trace(TestyMcTestFace.go());您应该得到输出“I‘’m Testy McTestFace”。
FlashPro将自动为您加载RSL。但是要注意,如果你不让闪存自动预加载你的应用程序,它将不会立即可用。
如果您从第一步更改并重新导出了swc/swf,则这些更改应该在您再次运行现有swf时反映出来(不需要重新编译)。
注意事项:
小心使用RSL中的代码,很容易产生冲突类。作为一种最佳实践,应该避免将完全独立/去耦合的代码放到RSL中。如果在编译后的swf中不引用具有相同名称的类,那么加载RSL的类也是最好的。
还请记住,如果不是来自同一个域,RSL可以有sanbox/安全限制。
发布于 2016-05-20 20:28:22
不可能,RSL只用于运行时共享,而不是用于访问类所需的编译时共享。
第一件事是,一个类别的大小没有那么大,所以没有必要让它在主权财富基金之间成为唯一的共享。
现在您肯定,如果您做了任何更改,所有的swfs都必须重新编译,但这实际上并不准确,因为在一个给定的运行时中只能存在一个类定义。第一次运行的swf在默认情况下是加载类定义的,后面所有加载的swf都会在默认情况下被丢弃它们的类定义,所以在理论上不需要重新编译它们。
因此,如果要对类进行重大更改,则必须重新编译所有的swfs,而不是进行小的更改。但这种情况是你的应用程序设计的症状,这可能不是最有效和最符合逻辑的。
https://stackoverflow.com/questions/37352414
复制相似问题