Это показывает больше времени, чем ожидалось, и когда я добавляю 1 элемент, и он складывается, он добавляет в стек .... но не один раз 2 раза.Это показывает больше элементов в массиве, чем ожидалось
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ArenaRPG
{
public class Inventory
{
int slotWight;
int slotHeight;
int ItemsPerpage = 1;
int CurrentPage;
int Columns, Rows;
B_Item[,] items;
Backpack backpack;
Vector2 pos;
public Inventory(Backpack bpack,int itemsPerPage,int Columns,int Rows, int SlotWidth, int SlotHeight, Vector2 Pos)
{
this.backpack = bpack;
this.slotHeight = SlotHeight;
this.slotWight = SlotWidth;
this.pos = Pos;
this.Columns = Columns;
this.ItemsPerpage = itemsPerPage;
this.Rows = Rows;
items = new B_Item[Columns, Rows];
LoadItems(bpack);
}
public void Update(GameTime gameTime)
{
double Maxpages = Math.Ceiling((double)(items.Length - 1)/ItemsPerpage);
if (Input.KeyPressed(Keys.A))
{
CurrentPage++;
}
if (Input.KeyPressed(Keys.D))
{
CurrentPage--;
}
Input.Update(gameTime);
}
public void Draw(SpriteBatch spriteBatch)
{
var result = items.Cast<B_Item>().Skip(ItemsPerpage * (CurrentPage-1)).Take(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);
if (items[X,Y].StackSize > 1)
{
spriteBatch.DrawString (AssetManager.GetInstance(). Шрифт [ "Arial8"], пункты [X, Y] .StackSize.ToString(), новый Vector2 (DrawX + 20, DrawY + 20), цвет. Темно-синий); } spriteBatch.DrawString (AssetManager.GetInstance(). Font ["Arial8"], CurrentPage.ToString(), новый Vector2 (50, 50), Color.DarkBlue); }
}
}
}
}
public void LoadItems(Backpack BPack)
{
int itemIndex = 0;
for (int X = 0; X < Columns; X++)
{
for (int Y = 0; Y < Rows; Y++)
{
if (itemIndex < BPack.items.Count)
{
items[X, Y] = BPack.items[itemIndex];
itemIndex++;
}
}
}
}
}
}
Рюкзак простой
public void AddItems(B_Item NewItem)
{
if (items.Count < MaxSlots)
{
foreach (var i in items.ToArray())
{
if (i.Item_Name == NewItem.Item_Name)
{
if (i.Is_Stackable == true && i.StackSize < 500)
{
i.StackSize += 1;
}
}
else
{
items.Add(NewItem);
}
}
}
else
{
items.Add(NewItem);
}
}
private void Remove(B_Item itemID)
{
for (int i = 0; i < items.Count; i++)
{
if (items.Count > 0)
{
items[i].StackSize -= 1;
}
items.RemoveAt(i);
}
}
Почему привлечь больше элементов, чем указано значение itemsPerPage
в инвентаре. конструктор
Inventory thiss = new Inventory(new PlayerBack(),2,1,32,32, 32, new Vector2(0, 0))
Вы добавляете тот же элемент 2 раза, удаляя 'items.Add (NewItem)' в конце метода 'AddItems'. – Shakra
Удалено 2-й элемент.Add (NewItem), теперь он не отображает никаких элементов на экране. – user3768433