如何在数组中显示一组索引

时间:2016-12-20 18:53:44

标签: c# xna monogame

我使用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.

在每页上显示x项目数量

所以基本上在额外页面上移动额外的项目并根据itemes.length / ItemsPerPage = maxPages

添加数字var 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)芽一样?

1 个答案:

答案 0 :(得分:0)

在你的Draw方法中,你有两个矩形:首先将DrawX和DrawY设置为位置,第二个设置为0,0。我想,你可以使用第二个而不是第一个。