2016-12-20 13 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 штук.

Мой главный вопрос заключается в том, чтобы установить и перемещать страницы 1 на 1 и показать, на каждой странице х количество предметов с помощью var itemsPerPage.

Так в основном перемещение дополнительных элементов на дополнительные страницы и добавить номер Var maxpages на основе itemes.length/ItemsPerPage = maxPages

Что я пробовал использовать 1D-массив Также я не могу нарисовать больше предметов в то время. Все они занимали одно и то же положение. Если я использую цикл For 2 раза ... делая его X и Y pos .... это не будет рисовать. Вот пример:

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, но как я могу изменить страницу ... ака пропустить числа в массиве и показать следующий индекс ... что-то вроде 1D-массива .skip(20).take(29) бутон, сделанный в 2D-массиве?

+0

Какова концепция «страницы» в вашем коде? Это должно быть просто, что-то вроде этого: 'spriteBatch.Draw (...); DrawPage (PageNumber); numDrawnOnThisPage ++; if (numDrawnOnThisPage == 6) {pageNumber ++; numDrawnOnThisPage = 0; } '. – Quantic

+0

Я думал как 'MaxPages = math.celling (items.length/ItemsPerPage);' Поэтому, когда я нажимаю какую-то кнопку, он использует CurrentPage как значение для изменения страницы и отображения количества x на страницу. Так что мне нужна помощь с этой проблемой litle. – user3768433

+0

Вам нужно рассчитать 'MaxPages'? Почему бы просто не нарисовать элементы 6 за раз на странице, пока не закончите элементы. Если вы хотите узнать количество страниц, вы можете просто посчитать их при их создании. Но да, вы можете вычислить его, ваш 'Math.Ceiling()' будет работать, но вам нужно указать хотя бы один из аргументов для float first, или же целочисленное деление сначала обрезает результат: 'Math.Ceiling ((float) items.Length/ItemsPerPage) 'должен работать. – Quantic

ответ

0

В вашем методе рисования у вас есть два прямоугольника: сначала с DrawX и DrawY устанавливается как позиция, а секунда с 0,0. Я думаю, вы могли бы использовать второй, а не первый.

+0

Я сделал это, но я получил ошибку' foreach (item in result) 'Erorr указывал частично; Я не сделал этого примера ... – user3768433

+0

Первые 2 параметра - это X и Y pos, секунды - это Wight и высота объекта. для обоих Rectangls ... вы имеете в виду, что я заменяю первые 0,0.sw, sh и second DrawX, DrawY, Sw, sh Sw = slotwidth, sh = slotheight? – user3768433

+0

Когда я выбрал 2D-массив как double в 'foreach (item in result)' – user3768433

 Смежные вопросы

  • Нет связанных вопросов^_^