0

我对 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) -- set BS skill on UI
    UI.setAttribute("model_WS", "text", WS) -- set WS skill on UI
    UI.setAttribute("model_attacks", "text", Attack) -- set attacks skill on UI

end

getWeapons(attacker)如果我删除具有的行(我将在接下来解释),该功能将按您预期的方式工作。它非常基本,它只是获取一个字符串,对其进行解析然后将其存储在stats变量中。最后 3UI行然后根据这些统计数据更新我的 UI 中的 3 个值。当我说这非常有效时,你必须相信我。

问题开始的地方是当我添加getWeapons(attacker)上述内容时,它还会更新这些UI值(实际上它会将它们重置为一些默认值)。但是,最后 3 行显然意味着要覆盖任何getWeapons(attacker)集合。但事实并非如此。假设起始 UIBS值为 1,getweapons()将其更新为 2,然后将其UI.setAttribute("model_BS", "text", BS)更新为 3;这正是我观察到的:它从 1 开始,然后(非常简短地)更新到 3,然后更新到 2。

就好像它以异步方式运行。有没有人见过这个或者可以建议我如何让 LUA等到函数getweapons()完成?

编辑:我自己修复了它,我使用的是内置的等待功能......但看起来,它实际上并没有等待。我删除了它,现在它可以工作了。真的很奇怪,因为我必须首先添加它,因为 UI 更新不够快。

4

1 回答 1

0

问题是我使用的是wait内部调用的桌面模拟器函数tagetweapons()(未显示)。下面是如何使用它的示例:

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

由于其他原因,我将这个设置为 2 个刻度 - 更新 UI 时至少需要一个刻度,所以我需要上述等待。但是,这具有使其表现得像异步调用的不利影响。删除等待后,它按预期工作。

于 2022-02-22T13:01:54.533 回答