2016-08-10 14 views
0

Извинения, если мой заголовок действительно не поймает суть того, что я пытаюсь спросить/выполнить, но, надеюсь, мое описание будет.Возможно ли обновлять информацию пользовательского интерфейса динамически?

Чтобы сохранить базовое значение для этого примера, у меня есть многочисленные текстовые экземпляры на экране, они должны обновляться не реже одного раза в секунду с новой информацией. Я в настоящее время создание пользовательского интерфейса, используя следующий код:

function BuildItemList() { 
var iButtonCount = 0; 

for (var i in CORE.Items) { 
    if (CORE.Items[i].Display) { 
     var ItemStyle = ItemCanAffordStyle; 

     if (!CanAfford(YAROS.Items[i].Name)) 
      ItemStyle = ItemCannotAffordStyle; 

     var ItemButton = sys.add.button((800 - 205), (25 + (65 * iButtonCount)), 'ItemButton', this.BuyItem.bind(this, CORE.Items[i].Name), this); 

     if (HasPrerequisites(CORE.Items[i].Name)) 
      sys.add.text(ItemButton.x + 10, ItemButton.y + 10, CORE.Items[i].DisplayName, ItemStyle); 
     else 
      sys.add.text(ItemButton.x + 10, ItemButton.y + 10, '???', ItemStyle); 

     if (CORE.Items[i].Versioned) 
      sys.add.text((ItemButton.x + ItemButton.width) - 30, ItemButton.y + 10, 'v' + YAROS.Items[i].UserOwns, ItemStyle); 
     else 
      sys.add.text((ItemButton.x + ItemButton.width) - 30, ItemButton.y + 10, YAROS.Items[i].UserOwns, ItemStyle); 

     var iCostsCount = 0; 
     var sResourceCosts = CORE.Items[i].BuyResources.split(','); 
     var sResourceCostsAmount = CORE.Items[i].BuyUnits.toString().split(','); 

     for (var x = 0; x < sResourceCosts.length; x++) { 
      var ItemDetailsStyle = ItemDetailsCanAffordStyle; 

      if (sResourceCostsAmount[x] > CORE.Resources[sResourceCosts[x]].CurrentCount) 
       ItemDetailsStyle = ItemDetailsCannotAffordStyle; 

      sys.add.image(ItemButton.x + (10 + (60 * iCostsCount)), ItemButton.y + 35, CORE.Resources[sResourceCosts[x]].ImageName); 
      sys.add.text(ItemButton.x + (30 + (60 * iCostsCount)), ItemButton.y + 37, parseFloat(parseFloat(sResourceCostsAmount[x]).toFixed(CORE.Resources[sResourceCosts[x]].DecimalPlaces)), ItemDetailsStyle); 
      iCostsCount++; 
     } 

     iButtonCount++; 
     } 
    } 
} 

Приведенный выше код сделал работу, однако я быстро понял, что это создает все элементы друг над другом, когда все, что я хочу сделать, это обновление информации я уже создан.

Итак, наконец, мой вопрос: нужно ли мне создавать каждый элемент, назначать этот элемент переменной и затем иметь отдельную функцию «Обновить», чтобы назначать новые значения переменным?

Мне не нужна помощь в повторном написании этого, но я правильно думаю? Или есть другой/правильный способ сделать это?

спасибо.

+0

Вы видели пример Phaser на [как обновить текст?] (Http://phaser.io/examples/v2/text/update-text) –

+0

@MikeC У меня есть это, я думал о том, как я возможно, придется это сделать, однако, поскольку у меня есть 3 элемента текста внутри каждой кнопки и 9 кнопок, я думал, что будет какой-то способ перебирать каждый текстовый элемент, а не жестко кодировать каждую метку переменной, которую он должен зацикливать. – MrDKOz

+0

Несомненно. Поместите их в [массив] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array), затем выполните цикл через массив. –

ответ

0

После того, как он ушел от кода и вернулся (после прочтения комментария Майка С.), я проделал этот трудный путь.

Я собираюсь назначить все необходимые элементы кнопки в массив, в том порядке, в котором они появляются на экране. Затем я пройду через массив и обновлю информацию.

Это похоже на самый разумный способ достичь этого.

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