我遇到的问题是,如果我立即实例化一个需要来自RSL的资产的资产,有时RSL还没有初始化,并且为Font Class ArialRegular返回null。其他时候我得到“参考错误”。
我如何检查RSL和已加载资产的正确初始化?检查null类有时适用于被访问类本身返回null的情况,但是当存在引用错误时,检查Null将无济于事。
我已经使用RSL好多年了,所以我对它有丰富的经验。我遇到的问题似乎特定于字体。
解决方案:我在下面回答了我的问题。
答案 0 :(得分:1)
我不是100%使用动态RSL,因为我倾向于使用静态链接,因此我不确定您是否必须自己专门加载它们,或者播放器是否自动为您执行此操作。在任何情况下:
1)自己加载:你应该有一个回调,因此知道它什么时候被加载
2)自动加载:您可以使用getDefinitionByName()
循环每一帧并检查是否存在您知道在RSL中的类 - 当它停止返回null
时,则加载RSL。 / p>
无论哪种方式,如果您的资产需要您的RSL,那么在加载资产之前,您必须首先加载它 - 这可能会减慢您的应用启动速度,但是,那就是依赖性的本质。
对于类似字体的东西,我只是嵌入主SWF中 - 只要你没有嵌入整个东西,它就不那么大;您可以使用unicodeRange
并指定字形,或使用flex_config.xml
文件中定义的范围 - 如果您想查看它,我已经写过关于嵌入字体的文章:{{3 }}
如果多个资源声明了相同的字体,那么在出现字体问题时要检查的另一件事是。例如。如果swfA用字形a-z声明Arial,而swfB用字形0-9声明Arial,那么根据首先加载的swf,你的文本字段只显示字母或数字(embedFonts
设置为true)。我不确定这是设计还是flash播放器中的错误,但它之前是否会让我受伤
答案 1 :(得分:0)
好的,我找到了一个解决方案,指出一个无法纠正但可以避免的原因。
基本上,如果你有使用通过RSL嵌入的字体的TextFields(经典或TLF),则需要在运行时动态创建它们。它们不能是已加载的原始SWF资产的一部分。静态文本没问题,但需要RSL资产的动态和输入文本会混乱,除非在加载 字体资源后动态生成。
这是我过去想到的那些微妙问题之一,并希望我没有忘记。