Bevy的默认字体不可用吗?

7
试图使用Bevy将“Hello, world!”打印到屏幕上时,文本不会显示,直到我导入了第三方字体文件并将其作为字体值加载到Text组件的TextStyle值中。在使用该字体之前,我没有明确指定字体;我只是使用了Default::default()的值,即WeakHandle<Font>(Id(97059ac6-c9ba-4da9-95b6-bed82c3ce198, 0))。这似乎意味着Bevy默认找到了错误的字体或至少一个无法使用的字体。这更可能是系统提供的字体问题还是Bevy默认字体功能的问题?以下是最小可复现的示例:
use bevy::prelude::*;

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        .add_startup_system(setup)
        .run();
}

fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
    commands.spawn_bundle(UiCameraBundle::default());
    commands.spawn_bundle(TextBundle {
        text: Text::with_section(
            "Hello, world!",
            TextStyle {
                font_size: 60.0,
                color: Color::WHITE,
                font: asset_server.load("FiraSans-Bold.ttf")
            },
            Default::default()
        ),
        ..Default::default()
    });
}

那段代码是有效的。当我把字体值从 asset_server.load("FiraSans-Bold.ttf") 改为 Default::default() 后,屏幕上就没有显示什么了。


我并不真正了解Bevy,但我认为问题在于(令人困惑,并且没有任何文档可以明确涵盖它),Default::default()在这里并不会给你一个“默认字体”,而是一个“指向字体类型资产的默认句柄”——尽管该资产实际上是“null”。不确定这有什么用处或者为什么Default被实现为Handle<T>(至少似乎只实现了where T: Default之类的东西) - eggyal
1个回答

9

Bevy 0.11更新

Bevy 0.11现在提供了一个默认字体,该字体已经在这个PR中实现。

原始答案(v. 0.11之前)

目前Bevy还没有提供默认字体。

有一个已关闭的PR来添加一个默认字体,还有一些与此相关的未解决问题,比如这个或者那个

话虽如此,我认为这样做可能会让人感到困惑:

TextStyle {
     font_size: 60.0,
     color: Color::WHITE,
     font: Default::default()
},

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接