#javascript #canvas #webgl #phaser-framework
Вопрос:
Я использую Phaser 3 для разработки браузерной игры на холсте с WebGL. Я задаю ширину текста на холсте с помощью пользовательского загруженного шрифта, но не могу задать его стиль (например, курсив, полукольцо).
Вот код, который я использую для создания текста:
this.add.text(100, 600, 'Test Text', {
font: '50px Poppins'
})
this.add.text(100, 600, 'Test Text', {
font: '50px Poppins semibold'
})
Вот результат:
На втором изображении используется шрифт по умолчанию, а не Поппинс. Похоже, что как только я попытаюсь установить курсив или любой другой стиль, он вернется к шрифту по умолчанию.
Я также попытался установить его с помощью свойств (не повезло). Кто-нибудь сталкивался с такой же проблемой (стилизация пользовательских шрифтов) и как правильно загружать пользовательские шрифты в стиле?
Ответ №1:
Вопрос:
semibold
не является действительным font-weight
. так что это будет рассматриваться как шрифт.
Решение:
this.add.text(100, 600, 'Test Text', {
font: '600 50px Poppins' // 600 equivalent to Semi Bold
})
https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight
Комментарии:
1. Спасибо за вашу идею. Однако это ничего не меняет: imgur.com/a/0BxSbRw В документах также говорится, что нет атрибута для установки веса шрифта: newdocs.phaser.io/docs/3.55.2/…
2. Спасибо за ваше обновление. Я нашел проблему. Это не было связано с холстом. Это было связано с асинхронной загрузкой шрифтов из Google. С помощью webfontloader от Google я могу подождать с активным событием, пока они не будут готовы. Это устранило проблему.
3. @LarsFlieger, пожалуйста, подумайте о том, чтобы опубликовать свой собственный ответ и принять его, поскольку, похоже, вам нужно было решить две несвязанные проблемы. Я не уверен, почему вы приняли этот ответ (исправил ли он одну из ваших проблем?), Но, к сожалению, ваше решение скрыто в комментарии.
Ответ №2:
Проблема была связана с асинхронной загрузкой шрифтов из Google. С помощью webfontloader от Google я могу подождать с активным событием, пока они не будут готовы.
import WebFont = require('webfontloader')
export class BootScene extends Phaser.Scene {
private ready: boolean = false
constructor() {
super({
key: 'BootScene'
})
}
async preload(): Promise < any > {
WebFont.load({
google: {
families: ['Poppins:600i,600,400', 'Inconsolata']
},
active: () => {
// This is required for asnyc loading
this.ready = true
}
})
}
// Launch game when all assets are loaded
update(): void {
if (this.load.isReady() amp;amp; this.ready) {
this.scene.start('MainMenuScene')
}
}
}