class() 高级用法
class() 除了定义纯 Lua 类之外,还可以从 C++ 对象继承类。 比如需要创建一个工具栏,并在添加按钮时自动排列已有的按钮,那么我们可以使用如下的代码: -- 从 CCNode 对象派生 Toolbar 类,该类具有 CCNode 的所有属性和行为
local Toolbar = class("Toolbar", function()
return display.newNode() -- 返回一个 CCNode 对象
end) -- 构造函数
function Toolbar:ctor()
self.buttons = {} -- 用一个 table 来记录所有的按钮
end -- 添加一个按钮,并且自动设置按钮位置
function Toolbar:addButton(button)
-- 将按钮对象加入 table
self.buttons[#self.buttons + ] = button -- 添加按钮对象到 CCNode 中,以便显示该按钮
-- 因为 Toolbar 是从 CCNode 继承的,所以可以使用 addChild() 方法
self:addChild(button) -- 按照按钮数量,调整所有按钮的位置
local x =
for _, button in ipairs(self.buttons) do
button:setPosition(x, )
-- 依次排列按钮,每个按钮之间间隔 10 点
x = x + button:getContentSize().width +
end
end
class() 的这种用法让我们可以在 C++ 对象基础上任意扩展行为。 ~ 既然是继承,自然就可以覆盖 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
注意: Lua 继承类覆盖的方法并不能从 C++ 调用到。也就是说通过 C++ 代码调用这个 CCNode 对象的 setPosition() 方法时,并不会执行我们在 Lua 中定义的 Toolbar:setPosition() 方法。

最新文章

  1. 。linux桌面与命令行
  2. 【BZOJ 1455】罗马游戏
  3. OpenCV的基本数据结构
  4. WINCE6.0+ILI9806E休眠唤醒显示异常问题
  5. JSON基础知识总结
  6. DateDiff函数
  7. Django-CRM项目学习(八)-客户关系系统整体实现(待完成!)
  8. git 学习(4) ----- git rebase
  9. 移除Windows图标快捷方式小箭头
  10. Importing Maven projects' has encountered a problem
  11. SQL 三范式
  12. Java和Android的Lru缓存,及其实现原理
  13. ubuntu12.04安装Docker
  14. ROC曲线,AUC面积
  15. 一个获取本机ip地址的正则
  16. Liferay7 BPM门户开发之2: BPMN 2.0 规范入门 (Activiti BPMN extensions)
  17. SpringMVC -- 梗概--源码--贰--上传
  18. Strongly connected---hdu4635(强联通分量)
  19. Winrar去广告图文教程
  20. C# 如何将窗体写到Dll中

热门文章

  1. WIN10-修改网卡MAC
  2. SQL SERVER 2008 “阻止保存要求重新创建表的更改”
  3. ios中键盘处理(二)
  4. Linux-系统负载
  5. Java中用HttpsURLConnection访问Https链接
  6. ubuntu下安装迅雷thunder
  7. mysql--SQL编程(关于mysql中的日期,实例,判断生日是否为闰年) 学习笔记2.1
  8. mac 终端添加颜色
  9. MySQL的timestamp类型自动更新问题
  10. 基于matplotlib的数据可视化 - 笔记