如何跳过并接受数组
How skip and take in array
基本上我想做的是在屏幕上显示 16 个项目,并将额外的项目添加到新页面。
每页显示 16 个项目,另外 16 个项目与其他屏幕分开。
我正在使用二维数组 display/show 来筛选
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);
}
}
}
}
}
在此代码中 spritebatch.draw(item.texture dose not exit)
如果我将每个循环项替换为结果。
示例
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);
}
}
}
}
}
这里显示了列表中的所有项目。
如图所示
var result = items.Cast<double>().Skip(ItemsPerpage * (CurrentPage-1)).Таке(ItemsPerpage);
第一个问题你没有使用 Take
。跳过中的第二个问题你应该有 itemsPerPage * (CurrentPage-1)
,因为如果你在第一页你不应该跳过任何记录所以:(1-1)*ItemsPAerPage
= 0.
基本上我想做的是在屏幕上显示 16 个项目,并将额外的项目添加到新页面。
每页显示 16 个项目,另外 16 个项目与其他屏幕分开。
我正在使用二维数组 display/show 来筛选
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);
}
}
}
}
}
在此代码中 spritebatch.draw(item.texture dose not exit)
如果我将每个循环项替换为结果。
示例
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);
}
}
}
}
}
这里显示了列表中的所有项目。 如图所示
var result = items.Cast<double>().Skip(ItemsPerpage * (CurrentPage-1)).Таке(ItemsPerpage);
第一个问题你没有使用 Take
。跳过中的第二个问题你应该有 itemsPerPage * (CurrentPage-1)
,因为如果你在第一页你不应该跳过任何记录所以:(1-1)*ItemsPAerPage
= 0.