基本的には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
を使用していない
あなたはスキップして撮りたいですが、あなたのコードはただスキップしています。 2番目の「スキップ」は「テイク」であると想像されます。 – Abion47
また、 'items'を操作する前に' items'を 'double'型のコレクションにキャストしているため、' double'に 'Texture'という名前のフィールドがありません。キャストをする理由は何ですか? – Abion47
私はちょうど例で行った。ちょうど前と同じ量を示す。 アイテムリストをresultに置き換えた場合、 'item.texture'は表示されません。スプライトバッチ.Draw(テクスチャ、矩形(int、int、int、int)、Color.White); '最初のパラメータに何を描画するのかをテクスチャに設定する必要があります。私は最初の矩形に描画する場所と、どの辺、2番目の矩形を描画するのか、どこに描画するのかを設定しました。 もし私がスプライトシートを持っていたら、第2の矩形を使って描画するために特定のスプライトを使うことができます。 – user3768433