【发布时间】:2023-08-16 03:51:01
【问题描述】:
我正在使用 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 件物品。
我的主要问题是如何使用var itemsPerPage. 逐页设置和移动页面并在每页上显示 x 数量的项目
所以基本上在额外的页面上移动额外的项目并添加基于itemes.length / ItemsPerPage = maxPages的number var maxpages
我尝试过使用一维数组 我当时也不能画更多的项目。他们都画在同一个位置。 如果我使用 For 循环 2 次……使它成为 X 和 Y 位置……它不会绘制。 这是一个例子:
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)
}
现在它根本不会将项目绘制到屏幕上...如果我只是用 items(list) 替换结果,它将绘制但不会用 ItemsPerPage 限制列表
我可以使用columns and rows 设置“插槽”的数量,但是我如何更改页面...也就是跳过数组中的数字并显示下一个索引...类似于一维数组.skip(20).take(29) 芽在二维中完成数组?
【问题讨论】:
-
代码中“页面”的概念在哪里?它应该很简单,像这样:
spriteBatch.Draw(...); DrawPage(pageNumber); numDrawnOnThisPage++; if (numDrawnOnThisPage == 6) { pageNumber++; numDrawnOnThisPage = 0; }. -
我在想
MaxPages = math.celling(items.length / ItemsPerPage);所以当我按下某个按钮时,它使用 CurrentPage 作为值来更改页面并显示每页的 x 数量。所以我需要帮助解决这个小问题。 -
你需要计算一个
MaxPages吗?为什么不只在每页一次绘制 6 个项目,直到项目用完为止。如果您想知道页面的数量,您可以在创建它们时计算它们。但是是的,您可以计算它,您的Math.Ceiling()将起作用,但您需要先将至少一个参数转换为浮点数,否则整数除法将首先截断结果:Math.Ceiling((float)items.Length / ItemsPerPage)应该起作用。 -
如何设置一次可以绘制多少个项目。如果我说 6...并且页面是 2...它将需要从 5 绘制到 11 等等。如何设置每页的最大项目数?
-
所以基本上想在第 1 页从 0 到 5 绘制,第 2 页从 6 到 11 等等。当我将
Currentpage中的值减少/增加 1 时,在该数组中绘制该组索引。