【问题标题】:Can't use embed font无法使用嵌入字体
【发布时间】:2014-08-21 13:13:03
【问题描述】:

我按照说明做的一切。

类字体.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 为的字体资源 “资产/字体/OPENSANS-REGULAR_0.TTF”

我做错了什么?

我的项目结构:

【问题讨论】:

    标签: haxe openfl


    【解决方案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;
        }
    }
    

    【讨论】:

    • 在上面的sn-p代码中,你的意思是导入“flash.text.Font”还是“openfl.text.Font”?我试过这样的代码,但是(无论是导入)fontName 属性只返回“LIME_font_OpenSansFont”。
    • openfl.* 映射到 flash.*,导入是等价的。所有目标都会发生这种情况吗?
    猜你喜欢
    • 1970-01-01
    • 2020-07-21
    • 2019-12-21
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    相关资源
    最近更新 更多