我使用BaseItem列表,每次按下某个按钮以显示数组中的不同索引范围时我想显示。
以下是我尝试添加不可堆叠的不同项目的示例。
Public class BaseItem
{
public string name {get;set;}
public string descrip {get;set;}
public bool isStackable {get;set;}
public int stackSize {get;set;}
public int maxStackSize {get;set;}
public Texture2D texure{get;set}
}
我通过搜索使用了我在本网站上找到的这部分代码。
Vector2 Pos;
int ItemsPerPage = 6;
int Columns = 1;
int Rows = 255;
int CurrentPage = 1;
int MaxPages;
BaseItem[,] items = new Baseitem[Columns,Rows];
public void Draw(SpriteBatch spriteBatch)
{
for(int X = 0; i < Columns; X ++)
{
for(int X = 0; i < Columns; X ++)
{
int DrawX = Pos.X +(X * (slothSize +2);
int DrawY = Pos.Y +(Y * (slothSize +2);
spriteBatch.Draw(items[X,Y].texure, new Rectangle(DrawX, DrawY, 32,32), Color.Whie);
}
}
}
我的问题是,我如何在每页显示6个项目,因此额外的项目将移至下一页,
所以,如果我有30件物品,我需要有5页,每件都有6件物品。
我的主要问题是如何设置和移动页面1逐1并使用var itemsPerPage.
所以基本上在额外页面上移动额外的项目并根据itemes.length / ItemsPerPage = maxPages
我尝试使用一维数组 此外,我当时无法吸引更多物品。他们都处于相同的位置。 如果我使用For循环2次...使它成为X和Y pos ....它不会画。 这是一个例子:
BaseItem items[,] = new BaseItem[] {}
public void Draw(SpriteBatch spriteBatch)
{
var result = Items.Cast<double>().Skip(ItemsPerPage * Currentpage).Take(itemsPerPage);
foreach(item in result)
{
for(int X = 0; X < Columns; X++)
{
for(int Y = 0;Y < Rows; Y++)
{
int DrawX = pos.X + (X * (SlowtWidth +2);
int DrawY = pos.Y + (Y * (SlowtWidth +2);
if(items[X,Y] != null)
{
spriteBatch.Draw(items[X,Y], new Rectangle(DrawX,DrawY,SlotWidth, SlotHeight) new Rectangle(0,0,SlotWidth, SlotHeight),Color.White)
}
{
{
}
}
public void Update(GameTime gameTime)
{
if(CurrentPage <= 0)
{
CurrentPage = MaxPages;
}
if(CurrentPage => MaxPages)
{
CurrentPage = 1;
}
if(Input.KeyPressed(Keys.A))
{
CurrentPage++;
{
if(Input.KeyPressed(Keys.D))
{
CurrentPage--;
{
Input.Update(gameTime)
}
现在它根本不会将项目绘制到屏幕上...如果我只是用项目(列表)替换结果,它将绘制但不用ItemsPerPage
我可以设置&#34;插槽的数量&#34;通过使用columns and rows
,但我怎样才能更改页面...又跳过数组中的数字并显示下一个索引......就像在2D数组中完成的1D数组.skip(20).take(29)
芽一样?
答案 0 :(得分:0)
在你的Draw方法中,你有两个矩形:首先将DrawX和DrawY设置为位置,第二个设置为0,0。我想,你可以使用第二个而不是第一个。