首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从png加载字体?

如何从png加载字体?
EN

Stack Overflow用户
提问于 2022-06-27 11:42:11
回答 1查看 67关注 0票数 -1

只是想问问。如何从png加载字体?我尝试过使用.woff、.ttf和扩展字体,但它们都给出了相同的错误:错误:字体未找到:未定义。

在这里,我的尝试:

代码语言:javascript
复制
kaboom({
  width: 900,
  height: 500,
  font: "kenney-blocks",
  background: [117, 193, 255]
})

// load sprite's images and fonts
loadSprite("frog", "sprites/froggy.png");
loadSprite("arrow", "sprites/arrow.png");
loadSprite("waterlily", "sprites/waterlily.png")
loadFont("kenney-blocks", "fonts/Kenney-Blocks.woff", 6, 3)

我尝试了.ttf,上传到字体文件夹相同的文件,但.tff和更改加载字体线到该文件。

在这里我的控制台:

代码语言:javascript
复制
kaboom!

(tip: Cmd + S in editor refresh webview)

ERROR: Font not found: undefined
    -> node_modules/kaboom/src/kaboom.ts:2098:8
    -> node_modules/kaboom/src/kaboom.ts:4097:16
    -> node_modules/kaboom/src/kaboom.ts:4130:3
    -> node_modules/kaboom/src/kaboom.ts:2951:34
signal: interrupt
EN

回答 1

Stack Overflow用户

发布于 2022-06-27 12:10:37

因此,正如loadFont中所指出的(重点是我的):

位图字体加载到资产管理器.

因此,您将无法使用该方法加载例如.woff,因为它只能加载位图字体,例如.png

话虽如此,虽然在文档中似乎没有更多关于这一点的内容,但是有一个几个月前的公关被合并到kaboom中。它似乎允许引擎使用浏览器的HTML5画布API将字体字形呈现到屏幕外画布上,然后将它们拼接在一起,从正常的浏览器字体中动态创建PNG字体。

我快速浏览了源代码,它似乎是一条很有前途的道路:https://github.com/replit/kaboom/blob/master/src/kaboom.ts#L2419

那么,如何使用非位图字体呢?

据我所知,您只需将字体样式设置为

  1. 通过loadFont加载的位图字体的名称;或
  2. HTML5画布可以呈现的任何字体的名称。

因此,如果我们想使用任何系统字体,我们可以使用例如font: "sans-serif"font: "arial"等等,如果您想使用自定义字体,可以使用CSS将它加载到页面上,然后将font:设置为您在@font-face规则中指定的名称。

这个答案涵盖了为HTML5画布加载CSS字体,但我也将在这里展示一个简短的示例:

在CSS文件中,让我们称它为fonts.css

代码语言:javascript
复制
@font-face {
    font-family: 'kenney-blocks';
    src: url('fonts/Kenney-Blocks.woff');
}

在您的主HTML文件中,在<head>部分:

代码语言:javascript
复制
<link rel="stylesheet" href="fonts.css" />

在您的Kaboom设置中:

代码语言:javascript
复制
kaboom({
  font: "kenney-blocks",
  // ...

或者,你可以更新卡布姆

进一步研究发现,虽然他们还没有更新他们的文档,但是最新版本的Kaboom实际上有两个loadFont方法,旧版本从docs重命名为loadBitmapFont

如果您更新到库的最新版本,您将能够使用以下内容(注意,您不需要传递位图大小参数,因为它不再试图加载位图字体)

代码语言:javascript
复制
loadFont("kenny-blocks", "Kenney-Blocks.woff");

(见https://github.com/replit/kaboom/blob/master/src/kaboom.ts#L987)

然而,由于他们已经明确地重新命名了一些东西,这可能是一个突破性的改变,如果你已经写了相当多的游戏,这可能是值得记住的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72771509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档