在你的游戏中应用LUA.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
在你的游戏中应用LUA

PAGE PAGE 22 在你的游戏中应用LUA (ZT) 在你的游戏中应用Lua(1):在你的游戏代码中运行解释器 ??通常,你希望在你的游戏开始的时候读取一些信息,以配置你的游戏,这些信息通常都是放到一个文本文件中,在你的游戏启动的时候,你需要打开这个文件,然后解析字符串,找到所需要的信息。 ??是的,或许你认为这样就足够了,为什么还要使用Lua呢? ??应用于“配置”这个目的,Lua提供给你更为强大,也更为灵活的表达方式,在上一种方式中,你无法根据某些条件来配置你的游戏,Lua提供给你灵活的表达方式,你可以类似于这样来配置你的游戏: if player:is_dead() then do_something() else do_else() end 更为重要的是,在你做了一些修改之后,完全不需要重新编译你的游戏代码。 通常,在游戏中你并不需要一个单独的解释器,你需要在游戏来运行解释器,下面,让我们来看看,如何在你的代码中运行解释器: //这是lua所需的三个头文件 //当然,你需要链接到正确的lib #include lua.h #include lauxlib.h #include lualib.h int main(int argc, char *argv[]) { lua_State *L = lua_open(); luaopen_base(L); luaopen_io(L); const char *buf = print(hello, world!); lua_dostring(buf); // luaL_dostring(L,buf);原文有问题 lua_close(L); return 0; } 程序输出:hello, world! 有时你需要执行一段字符串,有时你可能需要执行一个文件,当你需要执行一个文件时,你可以这么做: lua_dofile(L, test.lua); 看,非常简单吧。 在你的游戏中应用Lua(1):Getting Value 在上一篇文章我们能够在我们的游戏代码中执行Lua解释器,下面让我们来看看如何从脚本中取得我们所需要的信息。 首先,让我来简单的解释一下Lua解释器的工作机制,Lua解释器自身维护一个运行时栈,通过这个运行时栈,Lua解释器向主机程序传递参数,所以我们可以这样来得到一个脚本变量的值: lua_pushstring(L, var); //将变量的名字放入栈 lua_gettatble(L, LUA_GLOBALSINDEX);变量的值现在栈顶 假设你在脚本中有一个变量 var = 100 你可以这样来得到这个变量值: int var = lua_tonumber(L, -1); 怎么样,是不是很简单? Lua定义了一个宏让你简单的取得一个变量的值: lua_getglobal(L, name) 我们可以这样来取得一个变量的值: lua_getglobal(L, var); //变量的值现在栈顶 int var = lua_tonumber(L, -1); 完整的测试代码如下: #include lua.h #inculde lauxlib.h #include lualib.h int main(int argc, char *argv[]) { lua_State *L = lua_open(); luaopen_base(L); luaopen_io(L); const char *buf = var = 100; lua_dostring(L, buf); // luaL_dostring lua_getglobal(L, var); int var = lua_tonumber(L, -1); assert(var == 100); lua_close(L); return 0; } 在你的游戏中应用Lua(1):调用函数 假设你在脚本中定义了一个函数: function main(number) number = number + 1 return number end 在你的游戏代码中,你希望在某个时刻调用这个函数取得它的返回值。 在Lua中,函数等同于变量,所以你可以这样来取得这个函数: lua_getglobal(L, main);//函数现在栈顶 #define lua_getglobal(L,s) lua_getfield(L, LUA_GLOBALSINDEX, (s)) #define LUA_GLOBALSINDEX (-10002) 取表中的元

文档评论(0)

haowendangqw + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档