2016-12-22 2 views
1

基本的には16項目を画面に表示し、余分なものは新しいページに追加します。どのようにスキップして配列を取る

16個のアイテムが1ページに表示され、16個は別のスクリーンで表示されます。

私は結果各ループ項目の中に置き換える場合は、このコードspritebatch.draw(item.texture dose not exit)

Vector2 Pos; 
int ItemsPerpage = 16; 
int CurrentPage; 

public void Draw(SpriteBatch spriteBatch) 
{ 
     var result = items.Cast<double>().Skip(ItemsPerpage * CurrentPage).Skip(ItemsPerpage); 

     foreach (var item in items) 
     { 
      for (int X = 0; X < Columns; X++) 
      { 
       for (int Y = 0; Y < Rows; Y++) 
       { 
        int DrawX = (int)pos.X + (X * (slotWight + 2)); 
        int DrawY = (int)pos.Y + (Y * (slotWight + 2)); 

        if(items[X,Y] != null) 
        { 
         spriteBatch.Draw(items[X,Y].Texure, new Rectangle(DrawX, DrawY ,32, 32), new Rectangle(0, 0, 64, 64), Color.White); 
        } 
       } 
      } 
     } 
    } 

をスクリーニングするために/ショーを表示するための2Dアレイを使用しています。

public void Draw(SpriteBatch spriteBatch) 
{ 
     var result = items.Cast<double>().Skip(ItemsPerpage * CurrentPage).Skip(ItemsPerpage); 
     foreach (var item in result) 
     { 
      for (int X = 0; X < Columns; X++) 
      { 
       for (int Y = 0; Y < Rows; Y++) 
       { 
        int DrawX = (int)pos.X + (X * (slotWight + 2)); 
        int DrawY = (int)pos.Y + (Y * (slotWight + 2)); 
        if(items[X,Y] != null) 
        { 
         spriteBatch.Draw(item.Texure, new Rectangle(DrawX, DrawY ,32, 32), new Rectangle(0, 0, 64, 64), Color.White); 
        } 

       } 
      } 
     } 
    } 

ここでは、私のリスト内のすべての項目を表示します。この写真のショーあなたがTakeを使用していないa busy cat

+0

あなたはスキップして撮りたいですが、あなたのコードはただスキップしています。 2番目の「スキップ」は「テイク」であると想像されます。 – Abion47

+0

また、 'items'を操作する前に' items'を 'double'型のコレクションにキャストしているため、' double'に 'Texture'という名前のフィールドがありません。キャストをする理由は何ですか? – Abion47

+0

私はちょうど例で行った。ちょうど前と同じ量を示す。 アイテムリストをresultに置き換えた場合、 'item.texture'は表示されません。スプライトバッチ.Draw(テクスチャ、矩形(int、int、int、int)、Color.White); '最初のパラメータに何を描画するのかをテクスチャに設定する必要があります。私は最初の矩形に描画する場所と、どの辺、2番目の矩形を描画するのか、どこに描画するのかを設定しました。 もし私がスプライトシートを持っていたら、第2の矩形を使って描画するために特定のスプライトを使うことができます。 – user3768433

答えて

2
var result = items.Cast<double>().Skip(ItemsPerpage * (CurrentPage-1)).Таке(ItemsPerpage); 

まず問題として 。あなたがスキップして2番目の問題はitemsPerPage * (CurrentPage-1)でなければなりません。もしあなたが最初のページにいるなら、レコードをスキップしないでください。(1-1)*ItemsPAerPage = 0.

+0

私は使用しました。私はここに入力していました...同じ場合、私はそれを変更するのを忘れました。 まだ...それはバグの1つでした。 しかし、items.texture = nullの部分... PlayerBackpackには、texureを宣言した項目があります。それはどういう意味ですか? – user3768433

+0

@ user3768433 SOの方針は、投稿ごとに1つの質問をすることです。あなたはそれについて新しい質問をすることができますが、おそらくそれは重複のために閉じられるでしょう。この質問をチェックしてください:http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it – mybirthname

+0

これは、ページが最初に '1'でリストされていることを前提としていますページ。最初のページが '0'で表される場合、このコードは間違ったページを取得します。 – Abion47

関連する問題