道歉,如果我的头衔并没有真正抓住我试图提出/完成的内容,但希望我的描述能够实现。
为了使这个示例保持基本,我在屏幕上有许多文本实例,这些实例需要至少每秒更新一次,并提供新信息。我当前正在使用以下代码创建UI:
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++;
}
}
}
上面的代码确实有效,但我很快意识到,当我想要做的就是更新我已经创建的信息时,这会创建所有元素。
最后我的问题是,我是否需要创建每个元素,将该元素分配给变量,然后单独使用&#34;更新&#34;函数为变量赋值?
我不需要帮助重写它来做到这一点,但我是否正确思考?或者还有其他/正确的方法吗?
谢谢。
答案 0 :(得分:0)
在离开代码并回来之后(在阅读了Mike C&#39的评论之后),我一直在努力解决这个问题。
我要按照屏幕上显示的顺序将所有需要的按钮元素分配给一个数组,然后我将遍历该数组并更新信息。
这似乎是实现这一目标最明智的方式。