在 Lua 中,使用同一项目中的另一个脚本中的布尔变量会出现空值错误
2016-8-25 16:2:1
收藏:0
阅读:135
评论:2
这段代码是为一个 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 = {155,130}
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
谢谢您的阅读。
点赞
用户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
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

答案解决我的问题是使用
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同样,任何提示和建议仍然受欢迎!