Skip to main content

脚本

我们使用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_valuenx_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。