无法使用嵌入字体

时间:2014-08-21 13:13:04

标签: haxe openfl

我做的就像在教学中一样。

Class Fonts.hx

import flash.text.Font;

@:font("assets/fonts/OPENSANS-REGULAR_0.TTF") class OpenSansFont extends Font { }

class Fonts 
{
    public static inline var OPEN_SANS_PATH = "assets/fonts/OPENSANS-REGULAR_0.TTF";
    public static inline var OPEN_SANS_FONTNAME = "OPENSANS-REGULAR_0.TTF";

    public function new()
    {
        Font.registerFont(OpenSansFont);
    }
}

但是当我尝试用这个创建TextFormat时:

var tf:TextFormat;
var openSans:Font = Assets.getFont(Fonts.OPEN_SANS_PATH);
tf = new TextFormat(openSans.fontName);

我发现了这个错误:

  

Assets.hx:257:[openfl.Assets]没有ID值为的Font资源   "资产/字体/ OPENSANS-REGULAR_0.TTF"

我做错了什么?

我的项目结构:

My project structure

1 个答案:

答案 0 :(得分:1)

您无法将openfl.Assets用于通过@:font / @:bitmap等嵌入的资源。

您应该使用TextFormat构造函数的字体名称。我假设您已经尝试过,看看有OPEN_SANS_FONTNAME变量。但是,这不是字体的名称,只是文件名

在Windows上,您应该可以通过双击字体(在打印/安装按钮下方)找到名称。

或者,这也应该有效:

import flash.text.Font;

@:font("assets/fonts/OPENSANS-REGULAR_0.TTF") class OpenSansFont extends Font { }

class Fonts 
{
    public static var OPEN_SANS_FONTNAME;

    public function new()
    {
        Font.registerFont(OpenSansFont);
        OPEN_SANS_FONTNAME = new OpenSansFont().fontName;
    }
}