Загрузчик Amethyst не может найти файл актива - PullRequest
0 голосов
/ 25 августа 2018

Я использую игровой движок Rust Amethyst для загрузки текстуры с именем ground.png, но Loader, похоже, не находит файл:

//...
let assets_dir = format!("{}", env!("CARGO_MANIFEST_DIR"));
let mut game = Application::build(assets_dir, Example)?.build(game_data)?;

My 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.

1 Ответ

0 голосов
/ 03 мая 2019

Надеюсь, эта таблица поможет вам, потому что есть много возможных ответов.

Все строки предполагают, что вы загружаете текстуру, используя:

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` |

Первые 4 не являются хорошими решениями (либо путь разработчика, либо путь игрока неверен).5-й и 6-й способы смириться с этим, что сделано для вас на master с помощью функции application_root_dir().

...