我正在使用Rust Amethyst游戏引擎加载名为ground.png
的纹理,但是Loader
似乎找不到该文件:
//...
let assets_dir = format!("{}", env!("CARGO_MANIFEST_DIR"));
let mut game = Application::build(assets_dir, Example)?.build(game_data)?;
我的assets_dir
是项目的根文件夹,并且在加载文件时,我附加了textures/ground.png
:
let texture_handle = {
let loader = world.read_resource::<Loader>();
let texture_storage = world.read_resource::<AssetStorage<Texture>>();
loader.load(
"textures/ground.png",
PngFormat,
Default::default(),
(),
&texture_storage,
)
};
我的文件目录如下:
├── src
│ └── main.rs
├── Cargo.toml
└── textures
└── ground.png
获取纹理时,我得到的错误是一个None
值:
assert!(
world
.read_resource::<AssetStorage<Texture>>()
.get(&texture_handle) != None
); //panics
我正在使用紫水晶0.8。
答案 0 :(得分:1)
希望此表对您有所帮助,因为有很多可能的答案。
所有行均假定您正在使用以下方式加载纹理:
loader.load("path/to/texture.png", ..)
列出的路径是相对于存储库目录的。
| Amethyst version | What the code uses for assets dir | How you run the executable | Where the texture should be |
| ---------------- | --------------------------------- | -------------------------- | --------------------------- |
| 0.10.0 | `"assets"` | cargo run | `$repo/target/$profile/assets/path/to/texture.png` |
| 0.10.0 | `format!("{}/assets", env!("CARGO_MANIFEST_DIR"))` | cargo run | `$repo/assets/path/to/texture.png` |
| 0.10.0 | `"assets"` | `./target/$profile/app` | `$repo/assets/path/to/texture.png` |
| 0.10.0 | `env!("CARGO_MANIFEST_DIR")` | `./target/$profile/app` | `$repo/assets/path/to/texture.png` |
| 0.10.0 | `option_env!("CARGO_MANIFEST_DIR").map(|d| format!("{}/assets", d)).unwrap_or("assets")` | cargo run | `$repo/assets/path/to/texture.png` |
| 0.10.0 | `option_env!("CARGO_MANIFEST_DIR").map(|d| format!("{}/assets", d)).unwrap_or("assets")` | `./target/$profile/app` | `$repo/target/$profile/assets/path/to/texture.png` |
| `master` | `application_root_dir()` | cargo run | `$repo/assets/path/to/texture.png` |
| `master` | `application_root_dir()` | `./target/$profile/app` | `$repo/target/$profile/assets/path/to/texture.png` |
前四个不是很好的解决方案(开发路径或播放器路径错误)。容忍它的第五种方法和第六种方法,是使用master
函数在application_root_dir()
上为您完成的。