我正在尝试制作一个音乐播放器,用户可以播放文件夹中的任何音频文件。为此,我尝试派生包含一个Music组件和一个Sound(Handle<AudioSource>)组件的实体。在Bevy示例中,我看到了似乎是我想要的这行代码:
// You can load all assets in a folder like this. They will be loaded in parallel without blocking
let _scenes: Vec<HandleUntyped> = asset_server.load_folder("models/monkey").unwrap();下面是我写的函数:
fn load_audio(mut commands: Commands, asset_server: Res<AssetServer>, audio: Res<Audio>) {
let music = asset_server.load_folder("music").unwrap();
for song in music {
commands.spawn((
Music,
Sound(song),
));
}
}由于song的类型为HandleUntyped,因此此代码会给出一个编译错误。我的第一个想法是将HandleUntyped转换为Handle<AudioSource>。我不得不想象有一些方法可以做到这一点,否则HanldeUntyped将是非常无用的,但是浏览一下Bevy文档,我找不到任何方法来做到这一点。Handle::<AudioSource>::from(song)不起作用。我还考虑过使用std::fs库来获取目录中的所有音频文件,并使用Bevy单独加载它们,但是load_folder方法的存在似乎意味着Bevy有一种更优雅、更简单的方法来实现这一点。
发布于 2020-12-17 03:59:17
当然,在放弃搜索并发布问题后,我立即找到了答案。HandleUntyped实现了typed()函数,该函数将其转换为类型化的Handle。我所需要做的就是用Sound(song.typed())替换Sound(song)。
https://stackoverflow.com/questions/65330265
复制相似问题