![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
lua
汐客SeaKr
这个作者很懒,什么都没留下…
展开
-
Lua 时间格式化 os.time,os.date
os.time() 得到是当前时间的距离1970.1.1.08:00时间的秒数,如果传入的参数小于这个时间,那么就会得到一个,秒数就是负数,会得到一个空值。原创 2021-06-02 11:38:16 · 3485 阅读 · 0 评论 -
Lua - 重写并避开自身循环调用
cocos 2dx当我们在lua中重写了控件的原生方法,如setContentSize等,在新的方法中还想要 调用原本控件的未重写方法,可参考如下写法function bg:setContentSize(bgSize) cc.Node.setContentSize(bg, bgSize)end其本质是使用lua的 . 写法手动传入参数并调用方法。原本的 bg:setContentSize(bgSize) 等效于 bg.setContentSize(bg, bgSize)。而上述写法在被原创 2021-03-12 14:39:03 · 489 阅读 · 0 评论 -
Cocos-2dx lua 点击事件注册
方法1 addEventListenerWithFixedPriority(listener, priority) listener为监听函数,priority为优先级,此方法中priority不能为0,优先级越小,事件越靠前。需要手动移除local director = cc.Director:getInstance()local eventDispatcher = director:getEventDispatcher()-- 依附于node节点-- 注册node:o...原创 2021-02-23 15:28:21 · 640 阅读 · 1 评论 -
Cocos-2dx lua 定时器
Cocos2dx 3.x Lua 中定时器的两种使用方式: (1)self:scheduleUpdateWithPriorityLua(update, priority) > 参数一:刷新函数> 参数二:刷新优先级其中 self 为 Node类 的子类。该方法默认为每帧都刷新一次,无法自定义刷新时间间隔。 (2)scheduler:scheduleScriptFunc(update, inteval, false) ...原创 2021-01-20 11:58:56 · 617 阅读 · 0 评论 -
Lua - sort排序报错 invalid order function for sorting
比较参数相等时只能传false,不能穿true,不然会报 invalid order function for sorting,无效的排序方法local tb6 = { {c = 6}, {c = 6, n = 1}, {c = 9}, {c = 6, n = 2}, {c = 1}, {c = 3}, {c = 5}, {c = 8}, {c = 4},}table.sort(tb6, function (a,b)原创 2020-12-21 20:20:31 · 3397 阅读 · 0 评论 -
Lua - 模块内部写法优化
Lua 模块与包模块类似于一个封装库,从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,可以把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度。Lua 的模块是由变量、函数等已知元素组成的 table,因此创建一个模块很简单,就是创建一个 table,然后把需要导出的常量、函数放入其中,最后返回这个 table 就行。require 方法Lua提供了一个名为require的方法用来加载模块。要加载一个模块,只需要简单地调用就可以了原创 2020-11-09 15:58:09 · 371 阅读 · 0 评论 -
Lua - 弱引用与弱表
使用弱表的目的是优化垃圾的自动回收。一、垃圾回收lua的垃圾回收算法为 标记清除法(Mark and Sweep),具体可查GC的三大基础算法。1、垃圾收集器GC可以自动执行也可以手动设置collectgarbage()2、对象符合可自动回收的两个条件 1、对象本身为可回收类型 2、无引用或只有弱引用(全局声明的变量存储在lua的全局表中,不会被自动回收)二、弱表(weak table) 弱表是一个表且拥有metatable元表,并在metatable中定义...原创 2020-10-10 17:07:02 · 819 阅读 · 1 评论 -
Lua调用C 常见问题
1、%1 is not a valid Win32 application%1不是有效的Win32应用程序出现原因:32-BIT的DLL和64-BIT的程序混用。如32位dll调用64位dll。解决方案:使用统一位数的程序。2、The specified procedure could not be found找不到指定的程序过程出现原因:使用c++时,需要dllexport和extern “C”关键字解决方案:程序集中使用dllexport和extern “C”关键字3、m原创 2020-09-23 10:27:28 · 575 阅读 · 0 评论 -
Lua - 深入理解闭包
深入理解Lua的闭包:概念、应用和实现原理转载 2020-09-02 20:31:27 · 147 阅读 · 0 评论 -
GC的三大基础算法
基本术语1. 垃圾(Garbage) 就是需要回收的对象。作为编写程序的人,是可以做出“这个对象已经不再需要了”这样的判断,但计算机是做不到的。因此,如果程序(通过某个变量等等)可能会直接或间接地引用一个对象,那么这个对象就被视为“存活”;与之相反,已经引用不到的对象被视为“死亡”。将这些“死亡”对象找出来,然后作为垃圾进行回收,这就是GC的本质。2、根(Root) 就是判断对象是否可被引用的起始点。至于哪里才是根,不同的语言和编译器都有不同的规定,但基本...转载 2020-09-02 16:34:12 · 497 阅读 · 0 评论 -
lua - math.floor 实现四舍五入
lua 中的math.floor函数是向下取整函数。math.floor(5.123) – 5math.floor(5.523) – 5用此特性实现四舍五入math.floor(5.123 + 0.5) – 5math.floor(5.523 + 0.5) – 6也就是对math.floor函数的参数进行 “+ 0.5” 计算...原创 2020-09-01 16:47:56 · 7823 阅读 · 0 评论 -
Lua - require和module
require不存_G只存package.loadedmodule即存_G又存package.loadedpackage.loaded里存的是require和module最后的返回值require 默认返回值是truemodule 默认返回值是模块的table也就是_G[modulename]返回多个值时package.loaded取第一个值如果一个文件里有多个module的话,返回值算第一个module的,其他module的package.loaded值都为自身,而且第二个module算第一转载 2020-09-01 16:47:12 · 234 阅读 · 0 评论 -
Lua - 输出打印table表
lua自带的print函数只能打印可转化为字符串的数据,如果打印table表的话,则会和打印函数和userdata类型数据一样,输出为内存地址的形式。工作中因项目需要,可打印table表的话,对bug的查修和信息的监控将会高效的多。打印table表的方法如下-- log输出格式化local function logPrint(str) str = os.date("\nLog output date: %Y-%m-%d %H:%M:%S \n", os.time()) .. str原创 2020-09-01 15:20:10 · 10613 阅读 · 1 评论 -
Lua - 点、冒号与self
理解Lua 语言中的点、冒号与selfhttps://www.w3cschool.cn/lua/o23m1te6.html转载 2020-09-01 14:21:55 · 116 阅读 · 0 评论 -
Lua - 垃圾回收
Lua 垃圾回收https://www.w3cschool.cn/lua/lua-garbage-collection.html转载 2020-09-01 14:20:09 · 111 阅读 · 0 评论 -
Lua - 模块与包,require与module
Lua 模块与包https://www.w3cschool.cn/lua/lua-modules-packages.htmlLua中的模块与module函数https://www.w3cschool.cn/lua/ovh51te4.html转载 2020-09-01 14:18:38 · 135 阅读 · 0 评论 -
Lua - 性能,内存优化
1、Table原理:1、Lua 实现表的算法颇为巧妙。每个表包含两部分:数组(array)部分和哈希(hash)部分,数组部分保存的项(entry)以整数为键(key),从 1 到某个特定的 n,(稍后会讨论 n 是怎么计算的。)所有其他的项(包括整数键超出范围的)则保存在哈希部分。顾名思义,哈希部分使用哈希算法来保存和查找键值。它使用的是开放寻址(openaddress)的表,意味着所有的项都直接存在哈希数组里。键值的主索引由哈希函数给出;如果发生冲突(两个键值哈希到相同的位置),这些键值就串成一转载 2020-08-31 17:51:07 · 1698 阅读 · 0 评论 -
Lua与C
Step By Step(Lua-C API简介)http://www.cnblogs.com/stephen-liu74/archive/2012/04/05/2433428.html一、基础知识二、栈三、C API中的错误处理Step By Step(C调用Lua)http://www.cnblogs.com/stephen-liu74/archive/2012/04/20/2460634.html一、基础二、table操作三、调用Lua函数Step By Step(Lua调用C函数)htt转载 2020-07-03 16:19:15 · 105 阅读 · 0 评论 -
lua - 创建只读表
通过lua本身的元表和元方法,加上代理的思想实现。具体如下function errorHandle(str) print("=================LUA ERROR:=================") if str then print(str) print("--------------------------------------------") end print(debug.traceback())原创 2020-07-03 15:07:48 · 406 阅读 · 0 评论 -
lua - 协程使用示例
代码:print("test begin")function foo (a) print("foo 函数输出", a) return coroutine.yield(2 * a) -- 返回 2*a 的值endco = coroutine.create(function (a , b) print("第一次协同程序执行输出", a, b) -- co-bod...原创 2020-02-12 19:46:39 · 187 阅读 · 0 评论 -
回旋矩阵 - 由外到内 lua实现
代码:-- 由外到内的回旋矩阵local w, h = 9, 7 -- 宽高local x, y = 1, 1 -- 数字矩阵角标local dx, dy = 0, 1 -- 下个数字的增量local cnt = 1 -- 初始值local arr = {}-- 初始化arrfor i=1,h do for j=1,w do if arr[i] == nil then...原创 2020-02-12 10:46:16 · 205 阅读 · 0 评论 -
取下界的二分查找
-- 取下界的二分查找,未找到目标值,则取比目标值小的最近的数-- 时间复杂度 log2nfunction LC(a, obj) local max, start, end1 = -1, 1, #a while start <= end1 do local mid = math.modf(start+(end1-start)/2) ...原创 2020-02-09 14:29:03 · 676 阅读 · 0 评论 -
lua - 字符串分割
代码:function __split(str, reps) local r = {} if str == nil then return nil end string.gsub(str, "[^"..reps.."]+", function(w) table.insert(r, w) end) return rendstr:待分割字符串reps:分割字符a = "1...原创 2020-02-06 15:52:41 · 5087 阅读 · 0 评论 -
Cocos - 2dx 自带tolua的使用,实现lua调用c++
本篇以cocos2d-x-3.17.2版本为例一、环境安装环境要求可参考 cocos2d-x-3.17.2\tools\tolua\README.mdown 文件中内容。windows如下:* Make sure that you have installed `android-ndk-r16` or later.* Download python2.7.3 (32bit) fr...原创 2020-01-16 15:36:06 · 388 阅读 · 0 评论 -
lua - 加载执行字符串语句loadstring方法
代码var = 11f=_G.loadstring("return" .." var+10")print(f())var = var + 4print(f())结果2125loadstring其实是将参数中的内容转换为了一个匿名函数f=_G.loadstring("return var+10")等价转换为了f=function(){ r...原创 2019-12-12 19:53:58 · 2305 阅读 · 0 评论 -
lua - lua调用c/c++的方法
lua与c之间的调用说白了就是建立c方法与lua方法的映射关系根据建立映射的方式不同,也就是调用的api不同进行分类一、手动在c中注册c方法和对应的lua方法名lua因为版本的更新,相关的api也有改动 lua 5.1之前:使用luaL_register方法实现 lua调用c/c++ lua 5.2之后:使用luaL_requiref方法实现 lua...原创 2019-12-06 17:32:00 · 224 阅读 · 0 评论 -
lua - 使用luaL_register方法实现 lua调用c/c++(lua5.1及之前版本可用)
lua5.1之前可以使用luaL_register方法在c/c++中进行方法的批量注册。直接整活。。。Test_Tolua.cpp// Test_Tolua.cppvoid Test_Tolua::init(){ const luaL_reg functions[] = { { "UserID", UserID }, { "InitSDK...原创 2019-12-06 17:20:03 · 4030 阅读 · 0 评论 -
lua - lua元表实现面向对象
主要通过extern.lua中的clone和class方法实现。function clone(object) local lookup_table = {} local function _copy(object) if type(object) ~= "table" then return object elseif ...原创 2019-11-25 20:06:08 · 358 阅读 · 0 评论 -
lua - 形参 参数...的用法
...可以使用arg进行访问代码:local function CC221806( ... ) -- body if arg.n == 1 then print("长度为1") else for k,v in pairs(arg) do if type(v) == "table" then ...原创 2019-11-22 18:14:26 · 1161 阅读 · 0 评论 -
lua - xpcall方法 debug错误输出
使用sublime写lua脚本时,报错是件很抓狂的事,本篇讲解将有效解决此问题。function __G__TRACKBACK__(msg) print("----------------------------------------") print("LUA ERROR: " .. tostring(msg)) print(debug.traceback()) ...原创 2019-11-22 16:39:02 · 1110 阅读 · 0 评论 -
lua - 垃圾回收器collectgarbage
相关讲解链接(来自菜鸟教程):https://www.runoob.com/lua/lua-garbage-collection.html代码示例:-- 先统计现有内存使用情况local mem1 = collectgarbage("count")print("初始内存:", mem1, "kb")-- 申请一些内存local local_list = {}for i=1...原创 2019-11-22 16:12:11 · 518 阅读 · 0 评论 -
lua - 元表Metatable与元方法__index、__newindex
1、 __index字段 对表访问表中没有所查key值时,触发元表的__index方法代码:-- lua 元表mymetatable = {} -- 元表mytable = {} -- 普通表print(mytable)print(mymetatable)print(getmetat...原创 2019-11-21 20:30:39 · 374 阅读 · 0 评论 -
lua - .和:调用函数的区别
区别 : :调用自带第一个参数self示例代码:a = {x = 3}a.foo = function(a) print(a.x)endlocal b = {x = 2}print(a.foo(b), a:foo())结果:23nil原创 2019-11-21 20:19:52 · 272 阅读 · 0 评论 -
Lua - 八种数据类型
Lua 是动态类型语言,变量不要类型定义,只需要为变量赋值。 值可以存储在变量中,作为参数传递或结果返回。Lua 中有 8 个基本类型分别为:nil、boolean、number、string、userdata、function、thread 和 table。测试代码:print(type("Hello world")) --> stringprint(type...原创 2019-11-15 20:28:07 · 832 阅读 · 0 评论 -
Lua - math数学库,5.2之前的最大最小值
lua5.2版本之前的最大值与最小值(5.2之前并没有math.mininteger和math.maxinteger常数可使用)自定义变量 (值约为9千万亿):math.maxValue = 2^53+10math.minValue = -(2^53+10)lua5.3版本后可用math.mininteger和math.maxinteger常数最大值为2^63....原创 2019-11-09 15:42:56 · 1423 阅读 · 0 评论 -
Lua - for、迭代器和闭包
for循环分为两种:数值型(numerical)for和泛型(generic)for。1、数值型for语法如下:for var = exp1, exp2, exp3 do somethingend上述循环中,var的作用范围为for循环内部,其值从exp1变化到exp2之前,每次循环都会执行something,并在每次循环结束后将步长(step)exp3增加到var上...原创 2019-10-23 15:49:37 · 458 阅读 · 0 评论 -
Lua - 闭包与upvalue
闭包示例代码:print("=====================我是分界线==============================")-- lua 闭包测试function closure() local i=0 -- 尾调用,此时的i成为upvalue 上值 return function() i = i + 1 r...原创 2019-10-22 16:04:00 · 214 阅读 · 0 评论 -
Lua - 深拷贝deepcopy的实现
深拷贝是为了对table多层嵌套时,进行数据的安全访问而设计的,代码实现:print("=====================我是分界线==============================")-- 浅拷贝 数据的安全访问只作用于第一层function table.copy(src) if src == nil then print("!!! try ...原创 2019-10-22 15:52:09 · 830 阅读 · 0 评论 -
Lua - string字符串API
示例如下:local str = "I like sing jump rap"-- 字符串全部转为大写字母。string.upper(str): I LIKE SING JUMP RAP-- 字符串全部转为小写字母。string.lower(str): i like sing jump rap-- 在一个指定的目标字符串中搜索指定的内容(第三个参数为索引),返回其具体位...原创 2019-10-21 16:03:03 · 201 阅读 · 0 评论 -
Lua - 查找表中是否存在某一key值或value值
代码如下:-- 查看某值是否为表tbl中的key值function table.kIn(tbl, key) if tbl == nil then return false end for k, v in pairs(tbl) do if k == key then return true end...原创 2019-03-07 15:48:39 · 24067 阅读 · 0 评论