欢迎来到天天文库
浏览记录
ID:11269604
大小:102.18 KB
页数:8页
时间:2018-07-11
《unity3d游戏开发之lua与游戏的不解之缘(中)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Unity3D游戏开发之Lua与游戏的不解之缘(中)通过前面的学习,我们知道设计Lua语言的目的是为了将Lua嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua语言本身没有像其它语言提供丰富的类库,因此Lua语言必须依赖于其它语言来完成功能上的扩展(可是正是在功能上牺牲才换来了Lua精简而稳定的核心)。如果我们要深入了解Lua语言的话,就必须要了解Lua语言与其它语言的交互接口,因为这将是我们使用Lua语言的基础。那么,今天就让博主来带领大家一起学习Lua语言与其它语言的交互吧!一、Lua堆栈 如果我们想要理解Lua语言与其它语言交互的实质,我们首
2、先就要理解Lua堆栈。简单来说,Lua语言之所以能和C/C++进行交互,主要是因为存在这样一个无处不在的虚拟栈。栈的特点是先进后出,在Lua语言中,Lua堆栈是一种索引可以是正数或者负数的结构,并规定正数1永远表示栈底,负数-1永远表示栈顶。换句话说呢,在不知道栈大小的情况下,我们可以通过索引-1取得栈底元素、通过索引1取得栈顶元素。 下面呢,我们通过一个实例来加深我们对于这段话的理解:1.#include 2.3.extern "C" {4.#include "lua.h"5.#include "lualib.h"6.#include "l
3、auxlib.h"7.}8.9.using namespace std;10.11.int main()12.{13.//创建Lua环境14.lua_State* L=lua_open();15.//打开Lua标准库,常用的标准库有luaopen_base、luaopen_package、luaopen_table、luaopen_io、16.//luaopen_os、luaopen_string、luaopen_math、luaopen_debug17.luaL_openlibs(L);18.//压入一个数字2019.lua_pushnumber(L,20);20
4、.//压入一个数字1521.lua_pushnumber(L,15);22.//压入一个字符串Lua23.lua_pushstring(L,"Lua");24.//压入一个字符串C1.lua_pushstring(L,"C");2.//获取栈元素个数3.int n=lua_gettop(L);4.//遍历栈中每个元素5.for(int i=1;i<=n;i++)6.{7.cout << lua_tostring(L ,i) << endl;8.}9.return 0;10.} 在上面的这段代码中,我们可以可以看到我们首先创建了一个lua_State类型的变量L
5、,我们可以将它理解成一个Lua运行环境的上下文(Context),这里我们在Lua堆栈中压入了四个元素:20、15、"Lua"、"C"然后将其输出,如果大家理解了Lua堆栈中的索引,【狗刨学习网】那么最终输出的结果应该是:20、15、"Lua"、"C",因为索引1始终指向栈底,最先入栈的元素会处于栈底。因此当我们按照递增的索引顺序来输出栈中的元素的话,实际上是自下而上输出,这样我们就能得到这样的结果了。 好了,如果这段代码没有什么问题的话,接下来我们来讲解Lua为C/C++提供的接口,它们均被定义在lua.h文件中。Lua提供的C/C++接口大部分与栈操作有关
6、,因此深入理解Lua堆栈是学习Lua语言的重点和难点。通过数据结构的知识,我们可以知道栈有出栈和入栈两种基本操作,Lua提供的CAPI中入栈可以通过push系列的方法来实现,如下图所示: 而出栈或者说查询的方法则可以通过to系列的方法来实现,如下图: 这两部分是学习Lua语言一定要去了解的内容,因为以后如果需要我们将Lua整合到其它项目中这些内容,这些东西可以说是原理性、核心性的东西。好了,下面我们利用这里的API对一个示例代码进行改造,这里加入了对栈中元素类型的判断:1.#include 2.3.extern "C" {4.#in
7、clude "lua.h"5.#include "lualib.h"6.#include "lauxlib.h"7.}8.9.using namespace std;10.11.int main()12.{13.//创建Lua环境14.lua_State* L=lua_open();15.//打开Lua标准库,常用的标准库有luaopen_base、luaopen_package、luaopen_table、luaopen_io、16.//luaopen_os、luaopen_string、luaopen_math、luaopen_debug17.luaL_op
此文档下载收益归作者所有