分析cocos2d-x的lua项目中的工具方法
2017-05-14 15:05
471 查看
在创建完cocos2d-x的lua项目后。打开项目的Resources中的extern.lua文件。里面有两个用于面向对象的方法。一个是用于克隆,一个是用于继承。
代码分析例如以下
在hello.lua文件里增加例如以下代码
执行,结果例如以下
代码分析例如以下
--克隆一个对象 function clone(object) --用于存储被訪问过的对象的表 local lookup_table = {} local function _copy(object) if type(object) ~= "table" then--假设类别不等于table。返回当前參数 return object elseif lookup_table[object] then--假设备份表中存在该对象,则直接返回 return lookup_table[object] end local new_table = {}--创建一个新的表 lookup_table[object] = new_table--把即将被訪问过的表存到备份表 for key, value in pairs(object) do--遍历,赋值 new_table[_copy(key)] = _copy(value) end return setmetatable(new_table, getmetatable(object))--设置元表。用于继承 end return _copy(object) end --Create an class. --创建类(类名。 父类) function class(classname, super) local superType = type(super)--获取父类的类型 local cls--定义一个变量。用来存储新创建的类的属性和函数 if superType ~= "function" and superType ~= "table" then--假设父类不是function类别或表类别。父类置空 superType = nil super = nil end if superType == "function" or (super and super.__ctype == 1) then--假设父类型是个function或者来自是c++的类 -- inherited from native C++ Object print(superType) cls = {} if superType == "table" then--来自引擎自带的c++类 -- copy fields from super for k,v in pairs(super) do cls[k] = v end- cls.__create = super.__create cls.super = super else--function cls.__create = super end cls.ctor = function() end--构造 cls.__cname = classname--类名 cls.__ctype = 1--指明派生与C++的类 --创建一个用于创建类的实例的方法 function cls.new(...) local instance = cls.__create(...) -- copy fields from class to native object for k,v in pairs(cls) do instance[k] = v end--拷贝属性 instance.class = cls--创建一个属性,指向cls instance:ctor(...)--构造 return instance end else -- inherited from Lua Object if super then--假设父类不为空 cls = clone(super)--把类克隆,放到cls中 cls.super = super--创建一个属性,指向父类 else cls = {ctor = function() end}--否则创建一个空的构造函数 end cls.__cname = classname--创建一个属性,指明类的名称 cls.__ctype = 2 -- lua 指明继承自lua自己定义的表 cls.__index = cls --把__index指向自己,用于形成一个继承的原型链 --创建一个用于创建类的实例的方法 function cls.new(...) local instance = setmetatable({}, cls)--创建一个空表,并设置它的元表为cls,即继承cls instance.class = cls--创建一个属性。指向cls instance:ctor(...)--调用构造函数 return instance end end return cls end測试用比例如以下
在hello.lua文件里增加例如以下代码
--引入extern.lua require "extern" --test local function test() local luaTable = {x=1, y=2} local N = class("N", luaTable) cclog("继承lua自己定义的表,訪问父类的x属性值:x="..N.x) local testSprite = function () return CCSprite:create("farm.jpg") end local M = class("M", testSprite) local m = M:new() m.customField = "customField" m:setOpacity(100) cclog("用C++本地类的方式继承。訪问父类改动后的属性:"..m:getOpacity()) cclog("訪问子类属性:"..m:getOpacity()) end test()
执行,结果例如以下
相关文章推荐
- 分析cocos2d-x的lua项目中的工具方法
- cocos2d-x-2.2.1和2.2.2创建新项目(visual studio 2012 开发环境)bat工具方法
- StatSVN插件使用方法总结-项目代码分析工具 工作量图表生成工具
- StatSVN插件使用方法总结-项目代码分析工具 工作量图表生成工具
- 应用 Rational 工具简化基于 J2EE的项目第 4 部分 : 分析和工具的进展
- 论软件需求分析方法和工具的选用—论文2:企业集团的信息管理系统应用
- IIS日志分析方法及工具
- 【翻译】语法分析工具Gold介绍(2)——基本开发方法
- 软件项目中的需求分析具体方法探讨之一
- (论1)论软件需求分析方法和工具的选用
- 评"软件工程项目管理:功能点分析方法与实践"
- 网管必学技术之IIS日志分析方法及工具
- 应用 Rational 工具简化基于 J2EE的项目第 4 部分 : 分析和工具的进展
- 论软件需求分析方法和工具的选用—论文4:IC行业内部的CAD应用
- 论软件需求分析方法和工具的选用—论文3:通信行业的应用
- IIS日志分析方法及工具
- 应用 Rational 工具简化基于 J2EE的项目第 4 部分 : 分析和工具的进展
- 学习TCP/IP的好方法:协议分析工具
- ERP项目实施风险分析与控制方法探讨
- 项目绩效分析方法-挣值技术