Laya BitmapFont

位图字体(Bitmap Fonts)又叫点阵字体或像素字体(Pixel Fonts),区别于矢量字体,指的是在类似九宫格有限像素空间内以一个一个点组合描述的字体外观样式。

位图字体由fnt格式的字体和一张png图片组成,fnt文件提供了对每个字符小图的索引,这种格式的字体可以由专门的软件生成,比如位图字体制作工具。

工具

位图字体制作工具

使用Bitmap Font Generator制作位图字体

4933701-216fee5a2611e75f.png
image.png

文档

Laya中的BitmapFont类是位图字体类,用于定义位图字体信息。

结构描述
Packagelaya.display
ClassLaya.BitmapFont
属性类型默认值描述
autoScaleSizebooleanfalse是否根据时机使用的字体大小缩放位图字体大小
fontSizenumber12当前位图字号
letterSpacingnumber0字符间距 单位像素
方法参数返回值描述
destroyvoid销毁位图字体
getCharTexturechar:stringTexture获取指定字符的字体纹理对象
getCharWidthchar:stringnumber获取指定字符的宽度
getMaxHeightnumber获取最大字符高度
getMaxWidthnumber获取最大字符宽度
getTextWidthtext:stringnumber获取指定文本内容的宽度
loadFontpath:string, complete:Handlervoid指定位图字体文件路径并加载,加载后自动解析。
parseFontxml:XMLDocument, texture:Texturevoid解析字体文件
parseFont2xml:XMLDocument, texture:Texturevoid解析字体文件
setSpaceWidthspaceWidth:numbervoid设置空格宽度,若字体库有空格则无需设置。

使用

Laya位图字体使用

  1. 使用位图字体制作工具生成并导出位图字体文件,包括PNG图片和FNT格式的字体两个文件。
  2. 使用资源加载器将PNG图片和FNT字体载入
let fntRes = Laya.Loader.getRes(fntUrl);
let pngRes = Laya.Loader.getRes(pngUrl);
  1. 创建BitmapFont位图字体对象
let bitmapFont = new Laya.BitmapFont();
  1. 使用BitmapFont位图字体对象解析图片和字体
bitmapFont.parseFont(fntRes, pngRes);
  1. 为Text文本注册位图字体
Laya.Text.registerBitmapFont(fontName, bitmapFont);

核心方法解析

Laya加载器获取指定资源地址的文件

Laya.Loader.getRes(url:string):any

Laya 文本注册位图字体

Laya.Text.registerBitmapFont(name:string, bitmapFont:BitmapFont):void
参数类型描述
namestring位图字体名称
bitmapFontBitmapFont位图字体对象

Laya 文本取消注册位图字体文件

Laya.Text.unregisterBitmapFont(name:string, destroy?:boolean):void
参数类型默认值描述
namestring位图字体名称
destroybooleantrue是否销毁指定的字体文件

封装

TypeScript封装位图字体管理器

/**
 * 字体工具管理类
 */
export default class FontManager{
    //单例对象
    private static instance:FontManager;
    public static getInstance():FontManager{
        if(!this.instance){
            this.instance = new FontManager();
        }
        return this.instance;
    }
    //缓存对象
    private _cache;
    //构造函数
    constructor(){
        this._cache = null;
    }
    /**
     * 注册位图字体
    */
    register(fontFntUrl, fontPngUrl, fontName){
        //判断缓存中是否存在
        if(this._cache && this._cache[fontName]){
            return;
        }
        //获取字体资源
        let fontFntData = Laya.Loader.getRes(fontFntUrl);
        let fontPngData = Laya.Loader.getRes(fontPngUrl);
        if(!fontFntData || !fontPngData){
            //todo
            //Logger.trace("注册纹理 字体文件或图片加载失败", fontFntUrl, fontPngUrl);
        }
        //创建位图字体
        let bitmap = new Laya.BitmapFont();
        //解析字体
        bitmap.parseFont(fontFntData, fontPngData);
        //文本注册位图字体
        Laya.Text.registerBitmapFont(fontName, bitmap);
        //缓存开关
        if(!this._cache){
            this._cache = {};
        }
        this._cache[fontName] = true;
    }
    /**
     * 注册位图字体
     * @param fontName 位图字体名称
     */
    unregister(fontName){
        if(this._cache && this._cache[fontName]){
            delete this._cache[fontName];
        }
    }
    /**
     * 是否注册位图字体
     * @param fontName 位图字体名称
     */
    isRegister(fontName){
        return this._cache && this._cache[fontName] ? true : false;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值