无法使Flash运行时共享库正常工作
我正在为我的项目使用FlashCS5(资产)和FlashDevelop(代码)。我们有大约20个fla/swf包含文本字段。我们所有的文本字段都使用相同的字体,并且该字体是我们公司特有的,因此不会安装在任何人的计算机上,因此需要嵌入该字体 我的最终目标是嵌入一种字体,供所有文本字段使用,主要原因有两个:无法使Flash运行时共享库正常工作,flash,fonts,shared-libraries,embedded-fonts,rsl,Flash,Fonts,Shared Libraries,Embedded Fonts,Rsl,我正在为我的项目使用FlashCS5(资产)和FlashDevelop(代码)。我们有大约20个fla/swf包含文本字段。我们所有的文本字段都使用相同的字体,并且该字体是我们公司特有的,因此不会安装在任何人的计算机上,因此需要嵌入该字体 我的最终目标是嵌入一种字体,供所有文本字段使用,主要原因有两个: 每当我们向字体(其他语言)添加更多字符时,我们只需要添加一次,而不是20次 文件大小不会急剧膨胀 我很难做到这一点。似乎我尝试的每件事都缺少字符(似乎只嵌入了每个fla中textfields
- 每当我们向字体(其他语言)添加更多字符时,我们只需要添加一次,而不是20次
- 文件大小不会急剧膨胀
[Fault] exception, information=ReferenceError: Error #1065: Variable FontName is not defined.
FontName是FNFont.fla和所有其他fla中字体对象的类名。它不是textfield的实例名(也不是类名),所以我不明白它是如何认为它是一个变量的。有人能解释一下吗
谢谢您可能需要搜索“运行时字体加载”,例如: 或者 创建字体资源SWF:
package {
import flash.display.Sprite;
public class FontLibrary extends Sprite {
[Embed(systemFont='Bank Gothic', fontName='emBank Gothic', mimeType='application/x-font')]
public static var BankGothicFont:Class;
}
}
从应用程序加载并注册SWF:
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
loader.load(new URLRequest("fontlibrary.swf"));
private function completeHandler(event:Event):void {
var FontLibrary:Class = event.target.applicationDomain.getDefinition("FontLibrary") as Class;
Font.registerFont(FontLibrary.BankGothicFont);
var tf:TextField = new TextField();
tf.defaultTextFormat = new TextFormat("emBank Gothic", 12, 0);
tf.embedFonts = true;
tf.rotation = 15; // to demonstrate the embed worked
tf.text = "blah blah blahnblah blah blahnblah blah blah ";
addChild(tf);
}
根据我的经验,您需要动态创建新的
TextFields
不能使用已在SWF
中编译的TextFields
,否则会出现上述问题
这是一个让人很难爱上Adobe的小错误 我不久前遇到了类似的问题,结果发现这是在加载程序中设置正确的
ApplicationDomain
的问题
我不确定你是否有类似的情况,但这是我的
- CS5.5
- 我有一个
,库中有几种字体。它们每个都被设置为导出以供运行时共享,并且它们被赋予了一个类名font.swf
- 有一个主swf,几个子swf被加载到其中
- 每个子swf都有没有嵌入的字体对象。字体对象被设置为“为运行时共享导入”,并被赋予与fonts.swf相同的类名
ApplicationDomain
加载到父级中的,因此子级可以访问父级的类路径,但不能相互访问。因此,第一个子项可以访问font.swf
中的字体,但第二个子项不能访问,因为它们位于同级,而不是父级
我相信有两种方法可以解决这个问题:
ApplicationDomain
设置为ApplicationDomain.currentDomain
,以便子主权财富基金与主父主权财富基金共享相同的ApplicationDomainvar-context:LoaderContext=new-LoaderContext();
context.applicationDomain=applicationDomain.currentDomain;
var clipLoader:Loader=new Loader();
load(url、上下文);
我以前试过这个,但没用。尽管我们可以看到字体正在被嵌入(通过使用enumerateFonts并在RegisterFont之后跟踪它们),仍然有许多字符丢失。在反编译了一些swf之后,我们注意到flash自动将字体嵌入到每个swf中,尽管我们在文本->字体嵌入中没有任何内容。嵌入的字符是库中每个textfield的Text属性中使用的字符。Textfields使用这些不可见的嵌入字体,而不是通过RegisterFont嵌入的字体。