2016-12-20 29 views
2

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

所以基本上基於itemes.length/ItemsPerPage = maxPages

移動上多餘的頁面額外的項目和增加數量VAR MAXPAGES 1移動網頁1,並顯示在項目中的每一頁X量

我曾嘗試過使用一維數組 此外,我不能在當時繪製更多的項目。他們都在相同的位置上繪製。 如果我使用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) 
} 

現在,它不會繪製項目屏幕在所有...如果我只是替換項目(名單)結果就得出,但不與帽名單ItemsPerPage

我可以通過使用columns and rows來設置一些「插槽」,但我怎樣才能改變頁面...又名跳過一個數組,並顯示下一個索引...像一維數組.skip(20).take(29)芽在二維數組中完成?

+0

代碼中的「頁面」的概念在哪裏?它應該很簡單,像這樣:'spriteBatch.Draw(...);一個DrawPage(PAGENUMBER); numDrawnOnThisPage ++; if(numDrawnOnThisPage == 6){pageNumber ++; numDrawnOnThisPage = 0; }'。 – Quantic

+0

我在想'MaxPages = math.celling(items.length/ItemsPerPage);' 因此,當我按下某個按鈕時,它使用CurrentPage作爲值來改變頁面並顯示每頁數量x。 所以我需要幫助解決這個問題。 – user3768433

+0

你需要計算一個'MaxPages'嗎?爲什麼不直接每頁繪製物品6,直到耗盡物品。如果你想知道頁數,你可以在創建它們時對它們進行計數。但是你可以計算出來,你的'Math.Ceiling()'可以工作,但是你至少需要先將一個參數強制轉換爲浮點數,否則整數除法將首先截斷結果:'Math.Ceiling((float) items.Length/ItemsPerPage)'應該工作。 – Quantic

回答

0

在您的繪製方法中,您有兩個矩形:首先將DrawX和DrawY設置爲位置,將第二個設置爲0,0。我想,你可以使用第二個,而不是第一個。

+0

我做到了,但我得到了錯誤'foreach(結果中的項目)'Erorr部分指向了; 我現在沒有做實例... – user3768433

+0

前2個參數是X和Y位置,秒是懷特和對象的高度。 這兩個矩形...你的意思是我代替第一個0,0.sw,sh和第二個DrawX,DrawY,Sw,sh Sw = slotwidth,sh = slotheight? – user3768433

+0

當我作爲二維數組作爲double在foreach中(項目中的結果)' – user3768433