2016-12-22 19 views
-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)) 
+0

同じ項目を2回追加し、 'AddItems'メソッドの最後に' items.Add(NewItem) 'を削除します。 – Shakra

+0

2番目のアイテムを削除しました。(NewItem)を追加すると、スクリーンにアイテムが表示されなくなりました。 – user3768433

答えて

1

ご意見申し訳ありませんが、間違っています。ここで正しいメソッド:

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; 
          return; 
         } 
        } 

       } 

      } 
      items.Add(NewItem); 

     } 
関連する問題