2017-09-28 6 views
2

私はテクスチャオブジェクトへのアクセスを取得するために見てきたすべての例は以下のような何かをすることです:Pistonのテクスチャやスプライトとして使用するオブジェクトのコレクションを格納する錆の慣用方法は何ですか?

let img = Texture::from_path(...) 

これは、テクスチャの配列を持つために、それはlet mut images: Vec<Texture>;のようなものでなければならないこと印象を与えますfrom_pathResult<Texture<R>, String>を返します。

そして、実際に道に迷い込んでいるTexture<R>です。 Texture<R>を作成するには、cratesuse ...という非常に多くのものが必要であり、それは完全に間違っていると感じます。

let loaded_textures:Vec<Option<T>> = Texture::from_path(...) 

又はピストンが持っているほとんどすべてをプルイン:

は正しいことですか?または、他の何か?

私の目標は、

struct Drawables { 
    obj_name: &'static str, 
    image: Texture<gfx_device_gl::Resources>, // or something else 
} 

let mut my_objects: Vec<Drawable>; 

fn LoadDrawables(window: &mut PistonWindow) -> Vec<Drawable> { 
    let assets = find_folder::Search::ParentsThenKids(3, 3) 
     .for_folder("assets") 
     .unwrap(); 
    let img1 = assets.join("some_img0.png"); 
    let img1 = Texture::from_path(
     &mut window.factory, 
     &img1, 
     Flip::None, 
     &TextureSettings::new(), 
    ).unwrap(); 
    let img2 = assets.join("some_img1.png"); 
    let img2 = Texture::from_path(
     &mut window.factory, 
     &img2, 
     Flip::None, 
     &TextureSettings::new(), 
    ).unwrap(); 
    vec![ 
     Drawable { 
      obj_name: "orc", 
      image: rogue, 
     }, 
     Drawable { 
      obj_name: "bat", 
      image: floor, 
     }, 
    ] 
} 

私が引っ張って避けるようにしようとしているクレートがgfx_device_glであることです。この作成には間違っていると感じます。既にピストンのようなゲームエンジンを搭載している場合は、少し低いレベルのようです。

+2

私はあなたに本当に尋ねるものは何もありません。はい、 'Vec'は物事のコレクションを格納する素晴らしい方法です。 'HashMap'は物事のコレクションを格納する素晴らしい方法です。利用可能なコレクションが多数あります(標準ライブラリと外部にあります)。あなたは '結果'と、あなたがクレートを使用してステートメントを使用しなければならないという事実に言及します。なぜあなたは「ピストンが持っているほとんど全てを引っ張る」必要があると思いますか? – Shepmaster

+0

vecのパスからテクスチャのvec(またはハッシュマップ)を作成しますか? – Boiethios

+0

すべての輸入品は何ですか?私が知ることから、既に持っていなければならない 'PistonWindow'から' Factory' implを得ることができます。次に、2つの新しいインポートがあります: 'TextureSettings'と' Flip'です。どちらも他の依存関係なしで構築できます。 –

答えて

1

おそらく、パスのコレクションをマップし、それぞれにテクスチャを作成したいと思うかもしれません。 Result秒のイテレータに収集するとき、あなたは彼らが開封されており、最後のコレクションの外部に結果を移動することができます。

let images: Result<Vec<Texture<_>>, String> = paths.iter() 
    .map(|path| Texture::from_path(
      &mut *window.factory.borrow_mut(), 
      &path, 
      Flip::None, 
      &TextureSettings::new()) 
    ) 
    .collect(); 

それはFactory<R>から推測することができますので、あなたはTexture<R>ためRパラメータを必要はありません私がちょうど_を入れたのはPistonWindowから得られるインスタンスです。実際には、imagesのタイプをちょうどResult<Vec<_>>に減らすことができます。望むのであれば、推測することもできます。

免責事項:私が実際にこのコードを実行することはできませんでした。しかし、それは動作しない場合、わずかな変更が必要です。

+0

これは私の質問に答えて、正しい質問をしていないことを示しています。 – tamato

関連する問題