在 Lua 中,使用同一项目中的另一个脚本中的布尔变量会出现空值错误

这段代码是为一个 modding 引擎 Unitale 编写的,它基于 Unity 并用 Lua 编写。

所以我正在尝试在我的脚本 poseur.lua 中使用一个布尔变量,当满足特定条件时,可以将它传递到另一个脚本 encounter.lua 中,在那里一个引擎预定义的函数被使用来使基于发生时刻的动作发生。

我尝试多次阅读引擎文档,按照 Lua 函数的确切语法,如 GetVar(),SetVar(),SetGlobal(),GetGlobal() 进行操作。搜索和谷歌有关该语言的内容,发布在子reddit和游戏交流中,并尝试多个小时自行解决它...我不能做到,也不能理解为什么?

我将为每个部分展示代码的部分。

poseur:

    -- 一个基本的怪物脚本骨架,您可以复制并修改以用于创建您自己的怪物。

    comments = {"闻起来像一个敌人的立场。\n",
            "Nidhogg_Warrior 正如他的生命取决于它一样摆姿势。\n",
            "Nidhogg_Warrior 的四肢不应该以这种方式移动。\n"}
    commands = {"招呼", "跳跃", "挑逗", "卑微"}

    EndDialougue = {"! !  ! ","ouiii"}

    sprite = "poseur" --总是 PNG。扩展名会自动添加。

    name = "Nidhogg_Warrior"

    hp = 99
    atk = 1
    def = 1
    check = "Nidhogg_Warrior 正在寻找 Nidhogg。\n"
    dialogbubble = "右大" --请参阅文档以查看您可用的气泡。
    canspare = false
    cancheck = true
    GreetCounter = 5
    Berserk = false

encounter:

    -- 一个基本的战斗脚本骨架,您可以复制并修改以用于创建您自己的战斗。

    encountertext = "Nidhogg_Warrior 正在疯狂地奔跑"
    nextwaves = {"子弹测试追逐者"}
    wavetimer = 5.0
    arenasize = {155130}
    music = "musAncientGuardian"
    enemies = {"poseur"}
    require("Monsters.poseur")
    enemypositions = {{0, 0}}

    -- 一个带有可供选择攻击的自定义列表。
    -- 在 EnemyDialogueEnding() 中实际选择发生。
    -- 放在这里以防你想使用它。
    possible_attacks = {"bullettest_bouncy", "bullettest_chaserorb", "bullettest_touhou"}

    function EncounterStarting()
        -- 如果你想立即改变游戏状态,那就是这个地方。
        Player.lv = 20
        Player.hp = 99
        Player.name = "Teemies"
     poseur.GetVar("Berserk")
    end

谢谢您的阅读。

点赞
用户5627640
用户5627640

答案解决我的问题是使用SetGlobal()GetGlobal()

由于某些原因,我之前尝试简单地使用SetGlobal(),结果是空值,尽管我像这样编写SetGlobal("Berserk",true)仍然会给我一个nill值错误,一旦我启动游戏。

但是我仍然使用不当。首先,我需要将SetGobal()放在条件的末尾,而不是放在poseur.lua脚本的开头,因为变量的更改……由于某些原因首先被覆盖了。

为了在我的encounter.lua函数中测试变量,我需要这样写

       function EnemyDialogueStarting()
            -- Good location for setting monster dialogue depending on how the battle is going.

        if GetGlobal("Jimmies") == true then
                TEEEST()
        end

    end

同样,任何提示和建议仍然受欢迎!

2016-08-25 17:51:42
用户4687565
用户4687565

首先,在 Lua 中,布尔值和数字等简单值在赋值时会被复制:

 global={}
 a=2
 global.a=a -- 这是一份复制
 a=4 -- 这个变化不会影响表中的值
 print(global.a) -- 2
 print(a) -- 4

其次,SetGlobal 和其他提到的函数并不是 Lua 语言的一部分,它们必须与你的引擎相关。可能,它们使用“全局”这个词并不是 Lua 中的“全局”,而是引擎定义的一种意义。根据引擎的具体情况,这些函数可能会对它们所给出的任何变量进行深度复制(也可能无法处理复杂对象)。

2017-01-25 10:12:20