LUA执行代码顺序错误-可能与桌面模拟器有关

我对LUA还比较新,并且还在学习。到目前为止,我还没有遇到任何异步功能,但我的代码似乎表现出这种行为。这真的很奇怪。我有以下功能:

function chgAttacker(attacker)
    local stats = getModelstats(attacker)
    Attacker = stats
    local WS = stripTextFormatting(stats[2])
    local BS = stripTextFormatting(stats[3])
    local Attack = stats[7]
    local weaponStrength, armorPen =  getWeapons(attacker)
    UI.setAttribute("model_BS", "text", BS) -- 在UI上设置BS技能
    UI.setAttribute("model_WS", "text", WS) -- 在UI上设置WS技能
    UI.setAttribute("model_attacks", "text", Attack) -- 在UI上设置攻击技能

end

如果我删除具有getWeapons(attacker)行的函数,函数将像您预期的那样工作(这是我接下来将要解释的)。它非常基本,只是获取一个字符串,解析它,然后将其存储在stats变量中。最后3行UI随后会根据这些状态更新我的UI中的3个值。当我说这个完美时,你必须相信我。

问题开始出现在我添加getWeapons(attacker)之上时,它也更新这些UI值(实际上它将其重置为某些默认值)。但是,最后的3行明显是要覆盖getWeapons(attacker)所设置的任何内容。但是,它没有。假设起始UI BS值为1,并且 getweapons()将其更新为2,则UI.setAttribute("model_BS", "text", BS)将其更新为3;这正是我观察到的:它从1开始,然后(非常简要地)更新为3,然后更新为2。

就像它是以异步方式运行一样。有人以前见过这种情况吗,或者可以建议我如何使LUA“等待”,直到getweapons()函数完成吗?

编辑:我自己修复了它,我正在使用内置的等待函数...但似乎它实际上并没有等待。我删除了这个函数现在它可以工作了。真的很奇怪,因为我必须首先添加它,因为UI无法快速更新。

原文链接 https://stackoverflow.com/questions/71219540

点赞
stackoverflow用户1414006
stackoverflow用户1414006

问题在于我在targetweapons()中(未显示)使用了Tabletop模拟器功能wait。下面是如何使用它的示例:

Wait.frames(
    function()
        print("Hello!")
    end,
    2
)

我将其设置为2个滴答,是为了其他原因 - 当更新UI时,至少需要一个滴答,因此我需要上述等待。但是,这具有使其表现为异步调用的不利影响。在删除后,它按预期工作了。

2022-02-22 13:01:54