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