游戏中的界面都是用LUA来写,这个和WOW是一模一样的,嗯,以后再慢慢研究.年终了,保存下先.
lua语言规则:
- lua_State *L = lua_open(); //建立一个LUA状态机
- luaopen_base(L); // 启动它
- const char *buf = "print('hello, world!')";
- lua_dostring(buf); //把buf写入到lua中并执行
- lua_close(L); // 关闭L
- lua_pushstring(L, "var"); //将变量的名字放入栈]
- lua_getglobal(L, "var"); //变量的值现在栈顶
- int var = lua_tonumber(L, -1); //取得栈顶的元素
- lua_tostring( ls, -1 ); //取得栈顶的的元素, 一般用于参数传递
- lua_pushstring( ls, s_szPlayer ); //把某个字符串元素压入栈中,可用于参数传出
- lua_pushnumber(L, 200); //把某个数字元素压入栈中,
- lua_register(L, "foo", foo);
- //把自己在C++中编写的函数foo拿到lua中注册,这样在lua脚本中就可以调用这个函数
在Lua中,函数等同于变量,所以你可以这样来取得这个函数:
- lua_getglobal(L, "main");//函数现在栈顶
现在,我们可以调用这个函数,并传递给它正确的参数:
- lua_pushnumber(L, 100); //将参数压栈
- lua_pcall(L, 1, 1, 0); //调用函数,有一个参数,一个返回值 //返回值现在栈顶
- int result = lua_tonumber(L, -1);
例子:
- #include "lua.h"
- #include "lauxlib.h"
- #include "lualib.h"
- int foo(lua_State *L)
- {
- //首先取出脚本执行这个函数时压入栈的参数
- //假设这个函数提供一个参数,有两个返回值
- //get the first parameter
- const char *par = lua_tostring(L, -1);
- printf("%s\n", par);
- //push the first result
- lua_pushnumber(L, 100);
- //push the second result
- lua_pushnumber(L, 200);
- //return 2 result
- return 2;
- }
- int main(int argc, char *argv[]){
- lua_State *L = lua_open();
- luaopen_base(L);
- luaopen_io(L);
- lua_register(L, "foo", foo);
- const char *buf = "r1, r2 = foo("hello") print(r1..r2)";
- lua_dostring(L, buf);
- lua_close(L);
- return 0;
- }
原文链接:http://tech.it168.com/j/2008-02-17/200802171011561.shtml