-1
予想より多くの時間が表示されます.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()、新しいベクトル2(DrawX + 20、DrawY + 20)、カラー。濃紺); } spriteBatch.DrawString(AssetManager.GetInstance()。font ["Arial8"]、CurrentPage.ToString()、新しいVector2(50,50)、Color.DarkBlue);インベントリに値itemsPerPage
で指定されたよりも多くのアイテムを描くのはなぜ }
}
}
}
}
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);
}
}
です。 コンストラクタ
Inventory thiss = new Inventory(new PlayerBack(),2,1,32,32, 32, new Vector2(0, 0))
同じ項目を2回追加し、 'AddItems'メソッドの最後に' items.Add(NewItem) 'を削除します。 – Shakra
2番目のアイテムを削除しました。(NewItem)を追加すると、スクリーンにアイテムが表示されなくなりました。 – user3768433