Lua开发
文章平均质量分 56
heyuchang666
这个作者很懒,什么都没留下…
展开
-
Lua 核心概念
Lua 核心 Lua核心部分仅包括Lua虚拟机的运转。Lua虚拟机的行为是由一组组opcode控制的。这些opcode定义在lopcodes.h及lopcodes.c中。而虚拟机对opcode的解析和运作在lvm.c中,其API以luaV为前缀。 Lua虚拟机的外在数据形式是一个Lua_State结构体,取名State大概意为Lua虚拟机的当前状态。全局St原创 2021-06-17 15:12:08 · 952 阅读 · 0 评论 -
Lua中..和#运算符的使用方法
'#',这个符号的作用是是获取table的长度原创 2016-03-29 10:10:19 · 4730 阅读 · 0 评论 -
Lua和C++交互详细总结_5_总结
Lua和C++是通过一个虚拟栈来交互的。C++调用Lua实际上是:由C++先把数据放入栈中,由Lua去栈中取数据,然后返回数据对应的值到栈顶,再由栈顶返回C++。Lua调C++也一样:先编写自己的C模块,然后注册函数到Lua解释器中,然后由Lua去调用这个模块的函数。原创 2016-06-08 15:51:06 · 1375 阅读 · 0 评论 -
Lua自己实现深度克隆一个值
Lua自己实现深度克隆一个值原创 2016-06-28 10:48:40 · 2213 阅读 · 0 评论 -
Lua游戏开发技能属性定义
-- 技能分组eSG_Attack = 0; -- 普攻eSG_Skill = 1; -- 技能eSG_TriSkill = 2; -- 触发技能-- 技能效果类型eSE_Damage = 1; -- 伤害eSE_Buff = 2; -- 祝福eSE_DBuff = 3; -- 诅咒原创 2016-07-11 11:11:20 · 1589 阅读 · 0 评论 -
Lua创建一个类 继承
-- ctor() 是类的构造函数,在调用 Shape.new() 创建 Shape 对象实例时会自动执行原创 2016-06-29 20:01:00 · 5737 阅读 · 0 评论 -
cocos2d-x 的lua继承
(1)class 是 cocos2d-x 的方法 class("A", B) A 继承 B,B必须是lua文件里的类(2)setmetatable(A, B) 是 lua 的继承, A 继承 B(3)通过 tolua 的继承 tolua.getpeer(target) target:cc.Sprite:create(img) 是C++的一个对象再通过 setmetatable(t, ChilSprite) 实现对 C++对象的继承转载 2016-06-29 20:32:57 · 2402 阅读 · 0 评论 -
Lua自己实现载入一个模块
当在模块名前面有一个"." 时,import() 会从当前模块所在目录中查找其他模块。因此 MyClass 及其相关文件不管存放到什么目录里,我们都不再需要修改 MyClass 中的 import() 命令。这在开发一些重复使用的功能组件时,会非常方便。 我们可以在模块名前添加多个"." ,这样 import() 会从更上层的目录开始查找模块。 不过 import() 只有在模块级别调用(也就是没有将 import() 写在任何函数中)时,才能够自动得到当前模块名。如果需要在函数原创 2016-06-29 20:49:51 · 6232 阅读 · 0 评论 -
Lua自己实现如果对象是指定类或其子类的实例,返回 true
Lua自己实现如果对象是指定类或其子类的实例,返回 true,否则返回 false原创 2016-06-29 20:55:50 · 2478 阅读 · 0 评论 -
LUA string库详解
1. string库中所有的字符索引从前往后是1,2,...;从后往前是-1,-2,...2. string库中所有的function都不会直接操作字符串,而是返回一个结果转载 2016-06-17 10:48:58 · 6000 阅读 · 0 评论 -
Lua和C++交互详细总结_4_Lua调用C++
1.我们编写了averageFunc求平均值和sayHelloFunc函数,2.然后把函数封装myLib数组里面,类型必须是luaL_Reg3.由luaopen_mLualib函数导出并在lua中注册这两个函数。转载 2016-06-08 15:49:37 · 3013 阅读 · 0 评论 -
Lua和C++交互详细总结_3_C++调用Lua
举个比较简单的例子,函数调用流程是先将函数入栈,参数入栈,然后用lua_pcall调用函数,此时栈顶为参数,栈底为函数,所以栈过程大致会是:参数出栈->保存参数->参数出栈->保存参数->函数出栈->调用函数->返回结果入栈。类似的还有lua_setfield,设置一个表的值,肯定要先将值出栈,保存,再去找表的位置。转载 2016-06-08 15:01:33 · 2930 阅读 · 0 评论 -
lua中遍历table的几种方式比较
前两种是泛型遍历,后两种是数值型遍历。当然你还会说lua的table遍历还有很多种方法啊,没错,不过最常见的这些遍历确实有必要弄清楚。 这四种方式各有特点,由于在工作中我几乎每天都会使用遍历table的方法,一开始也非常困惑这些方式的不同,一段时间后才渐渐明白,这里我也是把自己的一点经验告诉大家,对跟我一样的lua初学者也许有些帮助 首先要明确一点,就是lua中table并非像是C/C++中的数组一样是顺序存储的,准确来说lua中的table更加像是C++中的map,通过Key对应存储Val原创 2016-03-29 10:28:03 · 10312 阅读 · 1 评论 -
Lua_第25章 调用 C 函数
扩展 Lua 的基本方法之一就是为应用程序注册新的 C 函数到 Lua中去。 当我们提到 Lua 可以调用 C 函数,不是指 Lua 可以调用任何类型的 C 函数(有一些包可以让 Lua 调用任意的 C 函数,但缺乏便捷和健壮性)。正如我们前面所看到的,当C 调用 Lua函数的时候,必须遵循一些简单的协议来传递参数和获取返回结果。相似的, 从Lua 中调用 C 函数,也必须遵循一些协议来传递参数和获得返回结果。另外,从 Lua 调用 C 函数我们必须注册函数,也就是说,我们必须把C 函数的地原创 2016-04-28 17:53:46 · 3306 阅读 · 0 评论 -
Lua_第26章撰写 C 函数的技巧
26.1 数组操作 26.2 字符串处理 26.3 在 C 函数中保存状态 The Registry References UpvaluesLua 全局变量可以存放任何类型的 Lua 值,并且每一个独立的状态都有他 自己独立的全局变量集。然而,并不是在所有情况下,这种方法都是令人满意地解决方案,因为 Lua 代码可能会修改这些全局变量,危及 C 数据的完整性。为了避免这个问题, Lua 提供了一个独立的被称为 registry 的表,C 代码可以自由使用,但 Lua 代码不能访问他。原创 2016-04-29 15:48:55 · 4556 阅读 · 0 评论 -
Lua_第27章 User-Defined Types in C
Userdata Metatables 访问面向对象的数据 到目前为止我们使用的 userdata 称为 full userdata。Lua 还提供了另一种 userdata: light userdata。一个 light userdatum 是一个表示 C 指针的值(也就是一个 void *类型的值)。由于它 是一个值,我们不能创建他们(同样的,我们也不能创建一个数字)。可以使用函数 lua_pushlightuserdata 将一个 light userdatum 入栈:原创 2016-05-02 17:00:08 · 3671 阅读 · 0 评论 -
Lua_第28章 资源管理(上)
(通常这些资源也是内存,但由系统的其他部分来管理)。 在这种情况下,当一个对象成为垃圾并被收集的时候,这些相关的资源也应该被释放。一些面向对象的语言为了这种需要提供了一种特殊的机制(称为 finalizer 或者析构器)。Lua以_gc 元方法的方式提供了 finalizers。这个元方法只对 userdata 类型的值有效。当一个userdatum 将被收集的时候,并且usedatum 有一个_gc 域,Lua 会调用这个域的值 (应该是一个函数):以 userdatum 作为这个函数的参数调用。这原创 2016-05-05 14:38:27 · 2812 阅读 · 0 评论 -
Lua_第28章 资源管理(下)
注意,由于当我们创建解析器的时候调用了 XML_SetUserData,所以,所有的 C 句柄都接受 lxp_userdata 数据结构作为第一个参数。还要注意程序是如何使用由 lxp_parse设置的环境的。首先,他假定callback 表在栈中的索引为 3;第二,假定解析器 parser 在栈中索引为 1(parser 的位置肯定是这样的,因为她应该是 lxp_parse的第一个参数)。 f_EndElement 句柄和 f_CharData 类似,也很简单。他也是用两个参数调用相应的Lu原创 2016-05-05 14:40:50 · 2787 阅读 · 0 评论 -
lua math库
lua math库原创 2016-06-01 16:00:38 · 1798 阅读 · 0 评论 -
Lua和C++交互详细总结_1_Lua堆栈
要理解Lua和C++交互,首先要理解Lua堆栈。简单来说,Lua和C/C++语言通信的主要方法是一个无处不在的虚拟栈。栈的特点是先进后出。在Lua中,Lua堆栈就是一个struct,堆栈索引的方式可是是正数也可以是负数,区别是:正数索引1永远表示栈底,负数索引-1永远表示栈顶。 TValue stack[max_stack_len] // 欲知内情可以查 lstate.c 的stack_init函数存入栈的数据类型包括数值, 字符串, 指针, talbe, 闭包等,转载 2016-06-08 14:38:20 · 2044 阅读 · 0 评论 -
Lua和C++交互详细总结_2_堆栈的操作
ua_settop将栈顶设置为一个指定的位置,即修改栈中元素的数量。如果值比原栈顶高,则高的部分nil补足,如果值比原栈低,则原栈高出的部分舍弃。所以可以用lua_settop(0)来清空栈。转载 2016-06-08 14:46:54 · 2085 阅读 · 0 评论 -
Lua的table库函数insert、remove、concat、sort详细介绍
table.insert(table,[ pos,] value) table.remove(table[, pos]) table.concat(table[, sep[, i[, j]]]) table.sort(table[, comp])原创 2016-06-17 10:57:34 · 2926 阅读 · 0 评论 -
Lua自己实现angle角
Lua自己实现angle角原创 2016-06-22 18:35:42 · 2066 阅读 · 0 评论 -
Lua自己实现string.split功能
Lua自己实现string.split功能 split函数是编程语言中使用的函数,是指返回一个下标从零开始的一维数组,它包含指定数目的子字符串原创 2016-06-17 15:10:42 · 11714 阅读 · 0 评论 -
Lua代码风格
Lua使用Clean C[5](Clean C是标准C/C++的一个子集。它只包含了C语言中一些必要特性。这样方便把Lua发布到更多的可能对C语言支持不完整的平台上。比如,对于没有 ctype.h 的C语言编译环境,Lua提供了 lctype.c 实现了一些兼容函数。)编写的源代码模块划分清晰,大部分模块被分解在不同的 .c 文件中实现,以同名的.h文件描述模块导出的接口。比如,lstring.c实现了Lua虚拟机中字符串池的相关功能,而这部分的内部接口则在lstring.h中描述。原创 2017-04-01 11:47:13 · 919 阅读 · 0 评论 -
Lua内置库的实现(一)_math模块(二)_math模块API实现
math模块内的各个数学函数的实现中规中矩,就是使用的Lua手册里给出的API来实现的。 Lua的扩展方式是编写一个原型为int lua_CFunction (lua_State *L)的函数。L对于使用者来说,不必关心其内部结构。实际上,公开API定义所在的lua. h中也没有lua_State的结构定义。对于一个用C编写的系统,模块化设计的重点在于接口的简洁和稳定。数据结构的细节和内存布局最好能藏在实现层面,Lua的API设计在这方面做了一个很好的示范。这个函数通常不会也不建议被C程序的其它部分直接调用原创 2017-04-12 19:25:10 · 1857 阅读 · 0 评论 -
Lua代码翻译及预编译字节码
Lua在早期几乎都是被用来嵌入到其它系统中使用,所以源代码通常被编译成动态库或静态库被宿主系统加载或链接。但随着Lua的第三方库越来越丰富,人们开始倾向于把Lua作为一门独立语言来使用。Lua的官方版本里也提供了一个简单的独立解析器,便是lua.c所实现的这个。并有luac.c实现了一个简单的字节码编译器,可以预编译文本的Lua源程序。原创 2017-04-04 17:37:16 · 5546 阅读 · 0 评论 -
Lua内嵌库概念
作为嵌入式语言,其实完全可以不提供任何库及函数。全部由宿主系统注入到State中即可。也的确有许多系统是这么用的。但Lua的官方版本还是提供了不少必要的库。尤其是一些基础函数如pairs,error,setmetatable,type等等,完成了语言的一些基本特性,几乎很难不使用。 而coroutine,string,table,math等等库,也很常用。Lua提供了一套简洁的方案,允许你自由加载你需要的部分,以控制最终执行文件的体积和内存的占用量。主动加载这些内建库进入lua_State原创 2017-04-05 16:12:31 · 966 阅读 · 0 评论 -
Lua_第23章 C API 纵览
Lua是一个嵌入式的语言,意味着 Lua 不仅可以是一个独立运行的程序包也可以是一个用来嵌入其他应用的程序库。你可能觉得奇怪:如果 Lua 不只是独立的程序,为什么到目前为止贯穿整本书我们都是在使用 Lua 独立程序呢? 这个问题的答案在于 Lua 解释器(可执行的 lua)。Lua解释器是一个使用 Lua 标准库实现的独立的解释器,它是一 个很小的应用(总共不超过500 行的代码)。解释器负责程序和使用者的接口:从使用者那里获取文件或者字符串,并传给 Lua 标准库,Lua 标准库负责最终的代码运行。原创 2016-04-23 18:12:23 · 1729 阅读 · 0 评论 -
Lua内置库的实现(一)_string模块
Lua的string库相较其它许多动态语言的string库来说,可谓短小精悍。不到千行C代码就实现了一个简单使用的字符串模式匹配模块。虽然功能上比正则表达式有所欠缺,但考虑到代码体积和功能比,这应该是一个相当漂亮的平衡(C 语言社区中常用的正则表达式库PCRE的个头整体比lua的实现还要大好几倍)。若需要更强大的字符串处理功能,Lua的作者之一Roberto给出了一个比正则表达式更强大的选择LPEG 6。有这一轻一重两大利器,在Lua社区中,很少有人再用正则表达式了。string模块实现在lstrlib.c原创 2017-04-22 18:02:57 · 2101 阅读 · 0 评论 -
lua中的sort排序 反自反性 非对称性 传递性
ua中对table的排序一般是用lua自带的table.sort()函数排序,一般不采用自己写的排序的方式,以下来说一说table.sort()排序和在工作中遇到的问题 1.排序的方式table.sort(tbl,function(a,b) return a > bend)以上是一个简单的例子,得到的效果是对于待排序的数据的一个升序,你这样认为就是错了转载 2018-01-11 16:42:18 · 1479 阅读 · 0 评论 -
lua数据结构之table的内部实现
一、table结构1、Table结构体首先了解一下table结构的组成结构,table是存放在GCObject里的。结构如下:typedef struct Table { CommonHeader; lu_byte flags; /* 1<<p means tagmethod(p) is not present */ lu_byte lsizenode; /* 以2的...转载 2018-02-10 17:30:52 · 1705 阅读 · 0 评论 -
Lua 源文件划分
从官网下载到Lua 的源代码后,展开压缩包,会发现源代码文件全部放在src子目录下。这些文件根据实现功能的不同,可以分为四部分。1.虚拟机运转的核心功能2.源代码解析以及预编译字节码3.内嵌库4.可执行的解析器,字节码编译器原创 2017-03-31 18:21:56 · 753 阅读 · 0 评论 -
Lua函数的多个返回值
Lua中的函数的一个很特殊也很有用的性质,即可以有多个返回值。包括一些内置的函数就是这样。比如string.find函数,在给定的字符串中查找一个pattern,如果有匹配的部分,则返回对应的头、尾的两个索引值;如果不存在匹配,则返回nil。当然,用户定义的函数也可以有多个返回值,通过return关键字返回多个结果即可。比如一个返回数组中最大值及其索引的函数:转载 2016-09-20 15:23:07 · 9901 阅读 · 0 评论 -
Lua游戏开发—怪物,人物排序
游戏开发—怪物,人物排序原创 2016-09-02 19:28:25 · 1646 阅读 · 0 评论 -
Lua实现计算 UTF8 字符串的长度,每一个中文算一个字符
Lua实现计算 UTF8 字符串的长度,每一个中文算一个字符原创 2016-07-05 15:57:07 · 5658 阅读 · 1 评论 -
Lua实现遍历表格,确保其中的值唯一
Lua实现遍历表格,确保其中的值唯一原创 2016-07-05 16:00:50 · 5142 阅读 · 0 评论 -
Lua实现angle角
Lua自己实现angle角原创 2016-07-18 18:40:14 · 2030 阅读 · 0 评论 -
lua实现以字符串内容写入文件,成功返回 true,失败返回 false读取文件内容
luashi以字符串内容写入文件,成功返回 true,失败返回 false读取文件内容,返回包含文件内容的字符串,如果失败返回 nil原创 2016-09-10 11:27:06 · 5761 阅读 · 0 评论 -
lua 游戏开发_技能定义字段
游戏开发技能属性原创 2016-08-19 19:15:44 · 1126 阅读 · 0 评论