3

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

它是一个由 Drupal 提供支持、连接 AMFPHP 的 AS3 Web 应用程序。数据通过 Flash 没有问题,我已经验证 UTF-8 没问题。在这些 URL 中可以更好地看到问题:

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

该链接的明文版本:

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

(注意这个人的名字)

字体是 Inconsolata,但如有必要,我可以使用任何等宽开源字体。您可以看到我已经嵌入了字体(我什至选择了动态文本字段来嵌入整个内容,完整的字符集)以及库中的“新字体”菜单。在 CS4 创作工具中,Inconsolata 带有一个星号(根据 Adob​​e 文档,这意味着该事物已嵌入)。

我尝试了其他字体嵌入选项无济于事。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);

任何帮助将不胜感激。我真的不知道该怎么办。

谢谢

4

3 回答 3

3

在创建 Flash 时,字体嵌入是我一直以来最喜欢的敌人之一。但我找到了一种方法来减少我墙上的洞(和我头上的颠簸)。

  1. 将字体嵌入到库中
  2. 将字体符号(在库中)链接到扩展Font-class 的自定义类(MyFont现在让我们调用它)
  3. 创建一个TextFormat对象(我们称之为frmt
  4. frmt.font = new MyFont().fontName
  5. 创建一个TextField(我们称之为tf
  6. 分配tf.embedFonts = truetf.defaultTextFormat = frmt

希望这可以帮助。

于 2010-04-15T11:27:36.833 回答
1

我在使用 Arial Regular 时遇到了类似的问题(在启用了 HTML 的动态文本字段中)不显示由 AS 中的 html 标签指定的粗体文本。

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

于 2010-04-15T11:18:06.907 回答
0

我稍后会看看。

听起来有些熟悉。当我在一个多语言网站上工作时,虽然在 IDE(flash cs3)中显示了字符,但我遇到了同样的问题,即静态文本字段中的 swf 中没有显示字符。当时的问题在于 Arial 中的希腊字符。我必须下载带有正确希腊字符的单独版本的 Arial并修复它。

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

您是否尝试过使用Courier NewLucida Console做同样的事情?我尝试了一个基本设置(Tōru Iwatani 的名字写在 2 个 textields、一个 Courier New、一个 Lucida Console、嵌入式字体、动态文本、旋转文本字段,只是为了测试嵌入,它显示得很好。


编辑:

你好,

我使用来自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

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

如您在此处看到的,在库中嵌入字体没有帮助:

库嵌入

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

舞台嵌入

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

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 等字体的动态文本字段的实例名称。

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

祝你好运,乔治

于 2010-01-17T01:29:21.900 回答