字体未嵌入Flash CS4 AS3

时间:2010-01-17 00:49:17

标签: flash actionscript-3 fonts embedded-resource cs4

也许你可以帮助我解决我遇到的问题。该项目的URL是: http://www.mauriciogiraldo.com/vgline/beta/

这是一个由Drupal驱动的,AMFPHP连接的AS3网络应用程序。数据通过Flash没有任何问题,我已经验证了UTF-8是好的。在这些网址中可以更好地看到问题:

http://www.mauriciogiraldo.com/vgline/beta/#/146

该链接的纯文本版本:

http://www.mauriciogiraldo.com/vgline/node/146

(注意那个人的名字)

字体是Inconsolata虽然我可以在必要时使用任何等宽开源字体。你可以看到我已经嵌入了字体(我甚至选择了动态文本字段来嵌入整个字体,完整的字符集)以及库中的“新字体”菜单。 Inconsolata在CS4创作工具中显示星号(according to Adobe documentation表示该东西已嵌入)。

我尝试过其他字体嵌入选项无济于事。 Inconsolata在创作中使用时似乎有“ō”字符,但它没有出现在动态文本中。

我遇到的另一个问题是:如果我使用静态文本字段,则字体不会嵌入(WTF)。我必须将字段转换为动态然后才能工作(“视频游戏历史时间轴”左上角是一个动态文本字段,尽管我希望它不是......那个和其他人)。如果我使用静态文本字段,字体将转换为某种Times New Roman字体。

文本是AS3创建的(以及搜索结果)。

我通过HTML(.htmlText)嵌入文本和使用CSS设置样式。

整个代码是开源的,可以在这里找到:

http://code.google.com/p/vgline/

我可以在此处找到填写文本字段的示例:

http://code.google.com/p/vgline/source/browse/trunk/src/TLDetail.as

此类代码的片段是:

 var ss:StyleSheet = new StyleSheet();
 var css:String = ".title { color:#333333; font-family:Inconsolata; font-size:16; leading:2; } ";
 css += ".date { color:" + StringUtils.rgb2web(data.color.r, data.color.g, data.color.b) + "; font-family:Inconsolata; font-size:14; leading:4; } ";
 css += ".text { color:#333333; font-family:Inconsolata; font-size:11; leading:4; } ";
 css += ".link { color:#000000; font-family:Inconsolata; font-size:11; leading:4; text-decoration:underline; } ";
 css += "a:hover { text-decoration:none; } ";
 ss.parseCSS(css);
 var fechahtml:String = "<span class='date'>";
 if (data.mes != null && data.dia != null) {
         fechahtml += data.dia + " " + StringUtils.month2name(data.mes) + " " + data.anotext;
 } else if (data.mes != null) {
         fechahtml += StringUtils.month2name(data.mes) + " " + data.anotext;
 } else {
         fechahtml += data.anotext;
 }
 fechahtml += "</span>";
 date_txt = new TextField();
 date_txt.width = 275;
 date_txt.embedFonts = true;
 date_txt.antiAliasType = "advanced";
 date_txt.styleSheet = ss;
 date_txt.htmlText = fechahtml;
 date_txt.x = 8;
 date_txt.y = 3;

 addChild(date_txt);

非常感谢任何帮助。我真的不知道该怎么做。

由于

3 个答案:

答案 0 :(得分:3)

在创建flash时,字体嵌入是我最喜欢的敌人之一。但我找到了一种方法来减少墙壁上的孔洞(以及我头上的凹凸)。

  1. 将字体嵌入库中
  2. 将字体符号(在库中)链接到扩展Font - 类的自定义类(暂时将其称为MyFont
  3. 创建一个TextFormat对象(我们称之为frmt
  4. 设置frmt.font = new MyFont().fontName
  5. 创建TextField(我们称之为tf
  6. 分配tf.embedFonts = truetf.defaultTextFormat = frmt
  7. 希望这有帮助。

答案 1 :(得分:1)

我在Arial Regular(在启用了HTML的动态文本字段中)出现了类似的问题,没有显示由AS中的html标记指示的粗体文本。

通过将字体更改为Lucida Sans,一切正常。

答案 2 :(得分:0)

我稍后再看看。

听起来有些熟悉。 我在静态文本字段中没有显示在swf中的字符时遇到了同样的问题,尽管在我在多语言网站上工作时显示在IDE(flash cs3)中。时间问题与Arial中的希腊字符有关。 我必须使用正确的希腊字符下载a separate version of Arial并修复它。

也许是同一个问题,你需要一个不同版本的相同字体。

您是否尝试使用 Courier New Lucida控制台进行相同的操作?我尝试了一个基本的设置(TōruIwatani这个名字写在2个textields,一个Courier New,一个Lucida控制台,嵌入式字体,动态文本,旋转文本字段,只是为了测试嵌入,它显示得很好。


修改

您好,

我使用dafont.com

中的等宽字体进行了一些测试

这是我用来查找应该起作用的字体的代码段:

var fonts:Array = Font.enumerateFonts();
for(var i:int = 0 ; i < fonts.length; i++){
    if(fonts[i].hasGlyphs('ō')) trace(fonts[i].fontName);
}

这是我得到的清单:

Monaco
Lucida Grande
Bitstream Vera Sans Mono
saxMono
JackInput
Liberation Mono Regular
F25 Bank Printer

我尝试了两种不同的方法。

在图书馆中嵌入字体没有帮助,你可以在这里看到:

library embed

使用Stage上的实例嵌入字体适用于某些字体:

stage embed

这是我用于测试的代码,非常混乱,但它是一个测试:)

l.text = j.text = f.text = li.text = s.text = b.text = 'Hello Tōru Iwatani...Hello Tōru Iwatani...Hello Tōru Iwatani...';

var lucida:TextField = getStyledTextField("Lucida Grande");
var liberation:TextField = getStyledTextField("Liberation Mono Regular");
var sax:TextField = getStyledTextField("saxMono");
addChild(lucida);
addChild(liberation);
addChild(sax);
liberation.y = 30;
sax.y = 60; 
lucida.htmlText= liberation.htmlText = sax.htmlText = "<body><span class='text'>Hello Tōru Iwatani...</span></body>";

function getTextField(font:String):TextField{
    var label:TextField = new TextField();
    label.defaultTextFormat = new TextFormat(font,11,0x33333);
    label.autoSize = TextFieldAutoSize.LEFT;
    label.border = true;
    label.embedFonts = true;
    return label;
}

function getStyledTextField(font:String):TextField{
    var style:StyleSheet = new StyleSheet();
    style.parseCSS(".text { color:#333333; font-family:"+font+";  }");
    var label:TextField = new TextField();
    label.styleSheet = style;
    label.autoSize = TextFieldAutoSize.LEFT;
    label.border = true;
    label.embedFonts = true;
    return label;
}

l,li,b,j等是舞台上使用类似字体的动态文本字段的实例名称 lucida grande,liberation,bitstream vera sans mono,JackInput等。

我不确定问题是什么,但在舞台上嵌入角色对我有用, 另外,我嵌入了所有的字形只是为了确保。编译需要很长时间,您可能希望从那些有效的字体中选择一种字体,然后逐渐取出字形,直到找到需要使用的字形数量最少的字体。

古德勒克, 乔治