- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Unity3D游戏开发之Lua与游戏的不解之缘(中) 通过前面的学习,我们知道设计Lua语言的目的是为了将Lua嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua语言本身没有像其它语言提供丰富的类库,因此Lua语言必须依赖于其它语言来完成功能上的扩展(可是正是在功能上牺牲才换来了Lua精简而稳定的核心)。如果我们要深入了解Lua语言的话,就必须要了解Lua语言与其它语言的交互接口,因为这将是我们使用Lua语言的基础。那么,今天就让博主来带领大家一起学习Lua语言与其它语言的交互吧! 一、Lua堆栈 ? ? ? ?如果我们想要理解Lua语言与其它语言交互的实质,我们首先就要理解Lua堆栈。简单来说,Lua语言之所以能和C/C++进行交互,主要是因为存在这样一个无处不在的虚拟栈。栈的特点是先进后出,在Lua语言中,Lua堆栈是一种索引可以是正数或者负数的结构,并规定正数1永远表示栈底,负数-1永远表示栈顶。换句话说呢,在不知道栈大小的情况下,我们可以通过索引-1取得栈底元素、通过索引1取得栈顶元素。 ? ? ? 下面呢,我们通过一个实例来加深我们对于这段话的理解: #include?iostream extern?C?{ #include?lua.h #include?lualib.h #include?lauxlib.h } using?namespace?std; int?main() { //创建Lua环境 lua_State*?L=lua_open(); //打开Lua标准库,常用的标准库有luaopen_base、luaopen_package、luaopen_table、luaopen_io、 //luaopen_os、luaopen_string、luaopen_math、luaopen_debug luaL_openlibs(L); //压入一个数字20 lua_pushnumber(L,20); //压入一个数字15 lua_pushnumber(L,15); //压入一个字符串Lua lua_pushstring(L,Lua); //压入一个字符串C lua_pushstring(L,C); //获取栈元素个数 int?n=lua_gettop(L); //遍历栈中每个元素 for(int?i=1;i=n;i++) { cout??lua_tostring(L?,i)??endl; } return?0; } ? ? ? ?在上面的这段代码中,我们可以可以看到我们首先创建了一个lua_State类型的变量L,我们可以将它理解成一个Lua运行环境的上下文(Context),这里我们在Lua堆栈中压入了四个元素:20、15、Lua、C然后将其输出,如果大家理解了Lua堆栈中的索引,【 HYPERLINK / 狗刨学习网】那么最终输出的结果应该是:20、15、Lua、C,因为索引1始终指向栈底,最先入栈的元素会处于栈底。因此当我们按照递增的索引顺序来输出栈中的元素的话,实际上是自下而上输出,这样我们就能得到这样的结果了。 ? ? ? ?好了,如果这段代码没有什么问题的话,接下来我们来讲解Lua为C/C++提供的接口,它们均被定义在lua.h文件中。Lua提供的C/C++接口大部分与栈操作有关,因此深入理解Lua堆栈是学习Lua语言的重点和难点。通过数据结构的知识,我们可以知道栈有出栈和入栈两种基本操作,Lua提供的C API中入栈可以通过push系列的方法来实现,如下图所示: ? ? ? ??而出栈或者说查询的方法则可以通过to系列的方法来实现,如下图: ? ? ? ?这两部分是学习Lua语言一定要去了解的内容,因为以后如果需要我们将Lua整合到其它项目中这些内容,这些东西可以说是原理性、核心性的东西。好了,下面我们利用这里的API对一个示例代码进行改造,这里加入了对栈中元素类型的判断: #include?iostream extern?C?{ #include?lua.h #include?lualib.h #include?lauxlib.h } using?namespace?std; int?main() { //创建Lua环境 lua_State*?L=lua_open(); //打开Lua标准库,常用的标准库有luaopen_base、luaopen_package、luaopen_table、luaopen_io、 //luaopen_os、luaopen_string、luaopen_math、luaopen_debug luaL_openlibs(L); //压入一个数字20 lua_pushnumber(L,20); //压入一个字符串15 lua_pushnu
有哪些信誉好的足球投注网站
文档评论(0)