嵌入字体不显示文字(as3)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嵌入字体不显示文字(as3)相关的知识,希望对你有一定的参考价值。

使用flash开发。所以我从这里下载了“source sans”字体:https://fonts.google.com/specimen/Source+Sans+Pro?selection.family=Source+Sans+Pro

它有一堆ttf文件,“粗体,斜体等”我猜我只需要一个,所以我将常规文件复制到我的src文件夹,将其重命名为“SourceSansPro”,右键单击我的src文件夹并添加新字体图书馆。我把它命名为“SourceSansPro”。现在是我的代码:

主要课程:

    package
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.text.TextField;
    import flash.text.TextFormat;


    public class Main extends Sprite 
    {

        private var format:TextFormat = new TextFormat("SourceSansPro");
        private var text:TextField = new TextField;

        public function Main() 
        {
            text.embedFonts = true;
            text.setTextFormat(format);

            text.text = "abcdefg";

            addChild(text);

        }



    }

}

字体库的东西:

/**
Suggested workflow:
- create a fontLibrary subfolder in your project (NOT in /bin or /src)
- for example: /lib/fontLibrary
- copy font files in this location
- create a FontLibrary class in the same location
- one font library can contain several font classes (duplicate embed and registration code)

FlashDevelop QuickBuild options: (just press Ctrl+F8 to compile this library)
@mxmlc -o bin/SourceSansPro.swf -static-link-runtime-shared-libraries=true -noplay
*/
package 
{
    import flash.display.Sprite;
    import flash.text.Font;

    /**
     * Font library
     * @author 111
     */
    public class SourceSansPro extends Sprite 
    {
        /*
        Common unicode ranges:
        Uppercase   : U+0020,U+0041-U+005A
        Lowercase   : U+0020,U+0061-U+007A
        Numerals    : U+0030-U+0039,U+002E
        Punctuation : U+0020-U+002F,U+003A-U+0040,U+005B-U+0060,U+007B-U+007E
        Basic Latin : U+0020-U+002F,U+0030-U+0039,U+003A-U+0040,U+0041-U+005A,U+005B-U+0060,U+0061-U+007A,U+007B-U+007E
        Latin I     : U+0020,U+00A1-U+00FF,U+2000-U+206F,U+20A0-U+20CF,U+2100-U+2183
        Latin Ext. A: U+0100-U+01FF,U+2000-U+206F,U+20A0-U+20CF,U+2100-U+2183
        Latin Ext. B: U+0180-U+024F,U+2000-U+206F,U+20A0-U+20CF,U+2100-U+2183
        Greek       : U+0374-U+03F2,U+1F00-U+1FFE,U+2000-U+206f,U+20A0-U+20CF,U+2100-U+2183
        Cyrillic    : U+0400-U+04CE,U+2000-U+206F,U+20A0-U+20CF,U+2100-U+2183
        Armenian    : U+0530-U+058F,U+FB13-U+FB17
        Arabic      : U+0600-U+06FF,U+FB50-U+FDFF,U+FE70-U+FEFF
        Hebrew      : U+05B0-U+05FF,U+FB1D-U+FB4F,U+2000-U+206f,U+20A0-U+20CF,U+2100-U+2183

        About 'embedAsCFF' attribute:
        - is Flex 4 only (comment out to target Flex 2-3)
        - is 'true' by default, meaning the font is embedded for the new TextLayout engine only
        - you must set explicitely to 'false' for use in regular TextFields

        More information:
        http://help.adobe.com/en_US/Flex/4.0/UsingSDK/WS2db454920e96a9e51e63e3d11c0bf69084-7f5f.html
        */


        [Embed(source="SourceSansPro.ttf"
        ,fontFamily  ='SourceSansPro'
        ,fontStyle   ='normal' // normal|italic
        ,fontWeight  ='normal' // normal|bold
        ,unicodeRange='U+0020-U+002F,U+0030-U+0039,U+003A-U+0040,U+0041-U+005A,U+005B-U+0060,U+0061-U+007A,U+007B-U+007E'
        ,embedAsCFF='false'
        )]
        public static const fontClass:Class;

        public function SourceSansPro() 
        {
            Font.registerFont(fontClass);

        }

    }

}

所以在main中,如果text.embedFonts为false,它将显示默认字体,如果为true,它将显示为空白。

任何帮助?

编辑 - 新代码

package
{

    import flash.display.Sprite;
    import flash.events.Event;
    import flash.text.TextField;
    import flash.text.TextFormat;
    import flash.text.Font;

    public class Main extends Sprite 
    {

        private var format:TextFormat = new TextFormat("libel");
        private var text:TextField = new TextField;

        public function Main() 
        {



            [Embed(source="libel.ttf"
        ,fontFamily  ='libel'
        ,fontStyle   ='normal' // normal|italic
        ,fontWeight  ='normal' // normal|bold
        ,unicodeRange='U+0020-U+002F,U+0030-U+0039,U+003A-U+0040,U+0041-U+005A,U+005B-U+0060,U+0061-U+007A,U+007B-U+007E'
        ,embedAsCFF='false'
        )]

        Font.registerFont();

            text.embedFonts = true;
            text.setTextFormat(format);

            text.text = "abcdefg";

            addChild(text);

        }



    }

}
答案

这是你可能想要的。

package
{
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.text.TextFormat;
    import flash.text.Font;

    public class Main extends Sprite 
    {
        // After the [Embed] tag you need
        // a variable definition it is linked to.
        [Embed(source="libel.ttf", fontFamily='libel')]
        private var Libel:Class;

        public function Main() 
        {
            // In order to share the font with the whole application,
            // you need to provide its class to the method.
            Font.registerFont(Libel);

            var aFormat:TextFormat = new TextFormat;

            aFormat.font = "libel";
            // ... other format properties here.

            var aField:TextField = new TextField;

            // This way you will see that
            // TextField even if fonts don't render.
            aField.border = true;

            // Setting the default text format is a good idea here.
            aField.embedFonts = true;
            aField.setTextFormat(aFormat);
            aField.defaultTextFormat = aFormat;

            aField.text = "abcdefg";

            addChild(aField);
        }
    }
}

以上是关于嵌入字体不显示文字(as3)的主要内容,如果未能解决你的问题,请参考以下文章

ActionScript 3 AS3:显示嵌入式字体功能

为 AS3 嵌入字体。如何?

ActionScript 3 AS3递归字体嵌入

ActionScript 3 在AS3中嵌入字体 - 资产类

ActionScript 3 AS3在Flex中嵌入系统字体

ActionScript 3 AS3使用flex SDK嵌入字体