unity3d游戏开发之lua与游戏的不解之缘(中)

unity3d游戏开发之lua与游戏的不解之缘(中)

ID:11269604

大小:102.18 KB

页数:8页

时间:2018-07-11

unity3d游戏开发之lua与游戏的不解之缘(中)_第1页
unity3d游戏开发之lua与游戏的不解之缘(中)_第2页
unity3d游戏开发之lua与游戏的不解之缘(中)_第3页
unity3d游戏开发之lua与游戏的不解之缘(中)_第4页
unity3d游戏开发之lua与游戏的不解之缘(中)_第5页
资源描述:

《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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。