脚本
我们使用Lua5.1.5脚本,语法和教程请参考官方文档。
http://www.lua.org/manual/5.1/manual.html
属性
所有通过两种反射机制暴露的属性和方法,都可以在脚本中访问。
local property = object.XXXProperty
object.XXXProperty = xxx
调用成员函数
调用方法:
object:XXXMethod(param0, param1)
调用全局函数
nx_function(“global_function_name”, param0, param1,param2)
自定义属性
object.CustomProperty = xxx
local xxx = object.CustomProperty
全局对象
nx_set_value(“global_value_name”, global_value)
local global_value = nx_value(“global_value_name”)
Lua脚本中全局变量,在脚本重载后会丢失,所以我们建议使用nx_set_value
和nx_value
来设置全局对象,或者用对象的自定义属性的方式来保存数据。
由于脚本上下文的存在,各个游戏实例之间、游戏实例与编辑器之间是互相隔离的。
日志
nx_log(“test_log”)
弹窗
nx_msgbox(“test_msg”)
协程
使用nx_execute(script_path, script_function)
执行的脚本,如果脚本中有循环,并且调用了nx_pause
,则会触发协程机制。
a.lua
function test(form)
while true do
if not nx_is_valid(form) then
break
end
-- do something
nx_pause(0.0)
end
end
b.lua
nx_execute(“a”, test, form)
基于协程,可以实现一些伪多线程应用(如实现后台做一些繁重的任务的同时,更新进度条)。相对于真多线程,协程更容易编写,安全性也更高。
另外,fx_core中封装了一些通用的脚本方法,请参考:fx_core.chm。