clone:
-- 下面的代码,t2 是 t1 的引用,修改 t2 的属性时,t1 的内容也会发生变化 local t1 = {a = 1, b = 2} local t2 = t1 t2.b = 3 -- t1 = {a = 1, b = 3} <-- t1.b 发生变化 -- clone() 返回 t1 的副本,修改 t2 不会影响 t1 local t1 = {a = 1, b = 2} local t2 = clone(t1) t2.b = 3 -- t1 = {a = 1, b = 2} <-- t1.b 不受影响class:
类 = class(类名, [父类])
-- 定义名为 Shape 的基础类 local Shape = class("Shape") -- ctor() 是类的构造函数,在调用 Shape.new() 创建 Shape 对象实例时会自动执行 function Shape:ctor(shapeName) self.shapeName = shapeName printf("Shape:ctor(%s)", self.shapeName) end
-- Circle 是 Shape 的继承类 local Circle = class("Circle", Shape) function Circle:ctor() -- 如果继承类覆盖了 ctor() 构造函数,那么必须手动调用父类构造函数 -- 类名.super 可以访问指定类的父类 Circle.super.ctor(self, "circle") self.radius = 100 endclass() 除了定义纯 Lua 类之外,还可以从 C++ 对象继承类。
-- 从 CCNode 对象派生 Toolbar 类,该类具有 CCNode 的所有属性和行为 local Toolbar = class("Toolbar", function() return display.newNode() -- 返回一个 CCNode 对象 end)
既然是继承,自然就可以覆盖 C++ 对象的方法:
function Toolbar:setPosition(x, y) -- 由于在 Toolbar 继承类中覆盖了 CCNode 对象的 setPosition() 方法 -- 所以我们要用以下形式才能调用到 CCNode 原本的 setPosition() 方法 getmetatable(self).setPosition(self, x, y) printf("x = %0.2f, y = %0.2f", x, y) end
格式:
import(模块名)
import() 与 require() 功能相同,但具有一定程度的自动化特性。
require 必须写绝对路径,import可以写相对路径在模块名前添加多个“.”,这样 import() 会从更上层的目录开始查找模块,“..”上级目录开始查找
handler:
将 Lua 对象及其方法包装为一个匿名函数。
格式:
函数 = handler(对象, 对象.方法)在 quick-cocos2d-x 中,许多功能需要传入一个 Lua 函数做参数,然后在特定事件发生时就会调用传入的函数。例如触摸事件、帧事件等等。
-- 注册帧事件 self:scheduleUpdate(handler(self, self.onEnterFrame))
对一个数值四舍五入,如果传入的参数不是数值,则返回 0。
格式:
value = math.round(值)
测试文件是否存在,如果存在返回 true。
格式:
result = io.exists(路径)
可以使用 CCFileUtils:fullPathForFilename() 函数查找特定文件的完整路径,例如:
local path = CCFileUtils:sharedFileUtils():fullPathForFilename("gamedata.txt") if io.exists(path) then .... end
~~
读取文件,并返回文件内容。
格式:
contents = io.readfile(路径)
io.readfile() 会一次性读取整个文件的内容,并返回一个字符串,因此该函数不适宜读取太大的文件。
~~
将内容写入文件,成功返回 true。
格式:
io.writefile(路径, 内容, 写入模式)
“写入模式”参数决定 io.writefile() 如何写入内容,可用的值如下:
此外,还可以在“写入模式”参数最后追加字符“b”,表示以二进制方式写入数据,这样在某些平台上可以避免内容写入不完整。
io.writefile() 默认的“写入参数”是“w+b”。
Android 特别提示:在 Android 平台上,文件只能写入存储卡所在路径,assets 和 data 等目录都是无法写入的。
拆分一个路径字符串,返回组成路径的各个部分。
格式:
parts = io.pathinfo(路径)
使用示例:
local pathinfo = io.pathinfo("/var/app/test/abc.png") -- pathinfo.dirname = "/var/app/test/" -- pathinfo.filename = "abc.png" -- pathinfo.basename = "abc" -- pathinfo.extname = ".png"
返回指定文件的大小,如果失败返回 false。
格式:
size = io.filesize(路径)
Lua 的“#”操作可以取得表格的长度,但仅限从 1 开始连续数字为索引的表格。table.nums() 可以计算任何表格的长度。
返回指定表格中的所有键。
返回指定表格中的所有值。
合并两个表格。
格式:
table.merge(目标表格对象, 来源表格对象)
将来源表格中所有键及其值复制到目标表格对象中,如果存在同名键,则覆盖其值。
分割字符串。
格式:
result = string.split(要分割的字符串, 分隔符)