quick-x 2.2.1 语法摘记之framework.functions

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
end
class() 除了定义纯 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(模块名)

import() 与 require() 功能相同,但具有一定程度的自动化特性。

require 必须写绝对路径,import可以写相对路径

在模块名前添加多个“.”,这样 import() 会从更上层的目录开始查找模块,“..”上级目录开始查找


handler:

将 Lua 对象及其方法包装为一个匿名函数。

格式:

函数 = handler(对象, 对象.方法)
在 quick-cocos2d-x 中,许多功能需要传入一个 Lua 函数做参数,然后在特定事件发生时就会调用传入的函数。例如触摸事件、帧事件等等。

 -- 注册帧事件
    self:scheduleUpdate(handler(self, self.onEnterFrame))

math.round

对一个数值四舍五入,如果传入的参数不是数值,则返回 0。

格式:

value = math.round()

io.exists

测试文件是否存在,如果存在返回 true。

格式:

result = io.exists(路径)

可以使用 CCFileUtils:fullPathForFilename() 函数查找特定文件的完整路径,例如:

local path = CCFileUtils:sharedFileUtils():fullPathForFilename("gamedata.txt")
if io.exists(path) then
    ....
end

~~

io.readfile

读取文件,并返回文件内容。

格式:

contents = io.readfile(路径)

io.readfile() 会一次性读取整个文件的内容,并返回一个字符串,因此该函数不适宜读取太大的文件。

~~

io.writefile

将内容写入文件,成功返回 true。

格式:

io.writefile(路径, 内容, 写入模式)

“写入模式”参数决定 io.writefile() 如何写入内容,可用的值如下:

  • “w+”: 覆盖文件已有内容,如果文件不存在则创建新文件
  • “a+”: 追加内容到文件尾部,如果文件不存在则创建文件

此外,还可以在“写入模式”参数最后追加字符“b”,表示以二进制方式写入数据,这样在某些平台上可以避免内容写入不完整。

io.writefile() 默认的“写入参数”是“w+b”。

Android 特别提示:在 Android 平台上,文件只能写入存储卡所在路径,assets 和 data 等目录都是无法写入的。

io.pathinfo

拆分一个路径字符串,返回组成路径的各个部分。

格式:

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"

io.filesize

返回指定文件的大小,如果失败返回 false。

格式:

size = io.filesize(路径)
table.nums

Lua 的“#”操作可以取得表格的长度,但仅限从 1 开始连续数字为索引的表格。table.nums() 可以计算任何表格的长度。


table.keys

返回指定表格中的所有键。

table.values

返回指定表格中的所有值。

table.merge

合并两个表格。

格式:

table.merge(目标表格对象, 来源表格对象)

将来源表格中所有键及其值复制到目标表格对象中,如果存在同名键,则覆盖其值。

string.split

分割字符串。

格式:

result = string.split(要分割的字符串, 分隔符)

你可能感兴趣的:(lua,cocos2d-x,Quick)