quick lua 3.3常用方法和学习技巧之functions.lua目录

摘要:
~~~lualocalMyScene=classfunctionMyScene:ctor()self.frameTimeCount=0--注册帧事件self:addNodeEventListenerself:scheduleUpdate()endfunctionMyScene:onEnterFrameself.frameTimeCount=self.frameTimeCount+dtend~~~上述代码执行时将出错,报告"Invalidself",这就是因为C++无法识别Lua对象方法。要让上述的代码正常工作,就需要使用handler()进行一下包装:~~~luafunctionMyScene:ctor()self.frameTimeCount=0--注册帧事件self:addNodeEventListenerself:scheduleUpdate()end~~~实际上,除了C++回调Lua函数之外,在其他所有需要回调的地方都可以使用handler()。io.pathinfo拆分一个路径字符串,返回组成路径的各个部分例子:localpathinfo=io.pathinfo--结果:--pathinfo.dirname="/var/app/test/"--pathinfo.filename="abc.png"--pathinfo.basename="abc"--pathinfo.extname=".png"io.filesize返回指定文件的大小,如果失败返回false9.tabletable.numsLuatable的"#"操作只对依次排序的数值下标数组有效,table.nums()则计算table中所有不为nil的值的个数。

1.functions.lua (framework->functions.lua)

提供一组常用函数,以及对 Lua 标准库的扩展

1.printf

2.checknumber checkint checkbool checktable isset3.深度克隆一个值 clone

4.创建一个类 class

5.载入一个模块 import() 与 require() 功能相同,但具有一定程度的自动化特性

6.将 Lua 对象及其方法包装为一个匿名函数
在 quick-cocos2d-x 中,许多功能需要传入一个 Lua 函数做参数,
然后在特定事件发生时就会调用传入的函数。例如触摸事件、帧事件等等。
~~~ lua

local MyScene = class("MyScene", function()
return display.newScene("MyScene")
end)

function MyScene:ctor()
self.frameTimeCount = 0
-- 注册帧事件
self:addNodeEventListener(cc.NODE_ENTER_FRAME_EVENT, self.onEnterFrame)
self:scheduleUpdate()
end

function MyScene:onEnterFrame(dt)
self.frameTimeCount = self.frameTimeCount + dt
end

~~~

上述代码执行时将出错,报告"Invalid self" ,这就是因为 C++ 无法识别 Lua 对象方法。因此在调用我们传入的 self.onEnterFrame 方法时没有提供正确的参数。

要让上述的代码正常工作,就需要使用 handler() 进行一下包装:

~~~ lua

function MyScene:ctor()
self.frameTimeCount = 0
-- 注册帧事件
self:addNodeEventListener(cc.ENTER_FRAME_EVENT, handler(self, self.onEnterFrame))
self:scheduleUpdate()
end

~~~

实际上,除了 C++ 回调 Lua 函数之外,在其他所有需要回调的地方都可以使用 handler()。

7.math的一些方法
(1)math.newrandomseed()根据系统时间初始化随机数种子,让后续的 math.random() 返回更随机的值
(2)math.round(value) 对数值进行四舍五入,如果不是数值则返回 0
(3)math.angle2radian(angle) 角度转弧度
(4)math.radian2angle(radian) 弧度转角度

8.io

(1)io.exists(path) 文件是不是存在 注:调用的 io.open(path, "r")判断
(2)io.readfile(path)读取文件内容 io.open(path, "r") file:read("*a")
(3)io.writefile(path, content, mode)
以字符串内容写入文件,成功返回 true,失败返回 false
"mode 写入模式" 参数决定 io.writefile() 如何写入内容,可用的值如下:
- "w+" : 覆盖文件已有内容,如果文件不存在则创建新文件
- "a+" : 追加内容到文件尾部,如果文件不存在则创建文件
此外,还可以在 "写入模式" 参数最后追加字符 "b" ,表示以二进制方式写入数据,这样可以避免内容写入不完整。
**Android 特别提示:** 在 Android 平台上,文件只能写入存储卡所在路径,assets 和 data 等目录都是无法写入的。

(4)io.pathinfo(path) 拆分一个路径字符串,返回组成路径的各个部分
例子:
local pathinfo = io.pathinfo("/var/app/test/abc.png")
-- 结果:
-- pathinfo.dirname = "/var/app/test/"
-- pathinfo.filename = "abc.png"
-- pathinfo.basename = "abc"
-- pathinfo.extname = ".png"
(5)io.filesize(path) 返回指定文件的大小,如果失败返回 false

9.table

(1)table.nums(t) Lua table 的 "#" 操作只对依次排序的数值下标数组有效,table.nums() 则计算 table 中所有不为 nil 的值的个数。
(2)table.keys(hashtable) 返回所有的key
(3)table.values(hashtable) 返回所有的值
(4)table.merge(dest, src)将来源表格中所有键及其值复制到目标表格对象中,如果存在同名键,则覆盖其值
(5)table.indexof(array, value, begin)从表格中查找指定值,返回其索引,如果没找到返回 false
(6)table.keyof(hashtable, value)从表格中查找指定值,返回其 key,如果没找到返回 nil
(7)table.removebyvalue(array, value, removeall)从表格中删除指定值,返回删除的值的个数
(8)table.map(t, fn) 对表格中每一个值执行一次指定的函数,并用函数返回值更新表格内容
fn 参数指定的函数具有两个参数,并且返回一个值。原型如下:
function map_function(value, key)
return value
end
(9)table.walk(t, fn) 对表格中每一个值执行一次指定的函数,但不改变表格内容
fn 参数指定的函数具有两个参数,没有返回值。原型如下:
function map_function(value, key)
end
(10)table.filter(t, fn)

(11)table.unique(t, bArray)遍历表格,确保其中的值唯一

(12)string.htmlspecialchars(input)将特殊字符转为 HTML 转义符

(13)string.restorehtmlspecialchars(input)将 HTML 转义符还原为特殊字符,功能与 string.htmlspecialchars() 正好相反

(14)string.nl2br(input)

(15)string.split(input, delimiter)
-- 用指定字符或字符串分割输入字符串,返回包含分割结果的数组
-- @function [parent=#string] split
-- @param string input 输入字符串
-- @param string delimiter 分割标记字符或字符串
-- @return array#array 包含分割结果的数组

(16)string.ltrim(input) 去除输入字符串头部的空白字符,返回结果

(17)string.formatnumberthousands(num)将数值格式化为包含千分位分隔符的字符串 正则表达

print(string.formatnumberthousands(1924235))
-- 输出 1,924,235

免责声明:文章转载自《quick lua 3.3常用方法和学习技巧之functions.lua目录》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇μC/OS-III---I笔记8---事件标志直连Pixiv的N种姿势——Android,iOS,Mac,Windows&Linux下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

nginx安装配置lua支持

nginx安装很简单,配置lua相关的支持就需要额外的安装一些库和编译。 一、准备环境 yum -y install lua*wget https://luajit.org/download/LuaJIT-2.0.4.tar.gz wget https://github.com/simpl/ngx_devel_kit/archive/v0.2.19.tar...

Lua读写文件

文件读写 文件读写对制作游戏很有帮助。可以调用别的文件中的代码,保存最高分、游戏存档、玩家状态等信写到文件中。 首先,让我们看一个简单的命令:dofile。这个命令会读入另一个文件的代码并立即执行。 代码: dofile("./test.lua") 很简单的命令。注意 ./ 是指根目录,不是子目录。如果是子目录,应该这样用: 代码: dofi...

freeswitch用户整合(使用mysql数据库的用户表)

freeswitch是一款强大的voip服务器,可以语音和视频。但是它默认是采用/directory文件夹下的xml来配置用户的,对于整合到现有系统或者使用数据库保存用户信息的系统都是非常不方便的,所以,本文主要描述一种方法,解决freeswitch用户整合的问题。 完成这一任务需要三步,配置unixodbc,将用户验证转接到lua脚本,修改拨号计划使得...

CentOS7为php7.2安装php-redis扩展(redis环境搭建二)

安装前检查 安装前查看phpinfo()输出的版本与php -v 的版本是否一致,如果不一致安装成功后,输出phpinfo和php -v 都会找不到redis扩展,本人在此踩过坑 解决php -v查看到版本于phpinfo()打印的版本不一致问题可参考我的另一篇博客:https://www.cnblogs.com/clubs/p/13377676.html...

关于lua闭包导致引用无法释放内存泄露

最近项目存在严重的内存泄漏问题,每次切level 会增加20M无法释放的内存,翻遍了项目用了多个工具,查询资料等 发现项目中两种存在内存泄露的情况 1.lua闭包的不当使用,对比包的引用要及时 释放。 2.注册事件未及时取消订阅,注册到C#的luafunction 用完一定要dispose,委托事件要对应取消订阅或清空事件。 lua闭包写法 functio...

PHP对接口执行效率慢的优化

PHP对接口执行效率慢的优化 PHP对接口执行效率慢的优化 造成执行效率低的原因可以由很多方面找原因 从代码层面,代码质量低,执行效率也会有很大影响的。 从硬件方面,服务器配置低,服务器配置是基础,这个跑不动肯定慢。 从数据量方面,查询数据量过多,sql语句过于繁杂,执行缓慢。 服务器 从配置上做提升,对于系统整体的执行效率是相当明显的,这一点没有...