标签:面向对象 obj article col tor xxx 语法糖 color return
之前写过一篇关于lua实现面向对象的文章,借助元表和元方法实现,感觉也是有点乱。
我们可以参考cocos2d-x自己给出的类的实现,也即在luaBinding目录下extern.lua的文件中给出的实现:
function class(classname, super) -- print(classname) local superType = type(super) local cls if superType ~= "function" and superType ~= "table" then superType = nil super = nil end if superType == "function" or (super and super.__ctype == 1) then -- inherited from native C++ Object cls = {} if superType == "table" then -- copy fields from super print ("superTyper is table"); for k,v in pairs(super) do cls[k] = v end cls.__create = super.__create cls.super = super else cls.__create = super cls.ctor = function() end end cls.__cname = classname cls.__ctype = 1 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 instance:ctor(...) return instance end else -- inherited from Lua Object if super then cls = {} setmetatable(cls, {__index = super}) cls.super = super else cls = {ctor = function() end} end cls.__cname = classname cls.__ctype = 2 -- lua cls.__index = cls function cls.new(...) local instance = setmetatable({}, cls) instance.class = cls instance:ctor(...) return instance end end return cls end
创建对象时,可以通过className.new这种方式来创建,如
local MySpriteClass = class("MySpriteClass",cc.Sprite) function MySpriteClass:ctor() end return MySpriteClass
mySpriteClass 实例创建
local mySprite = MySpriteClass.new(xxx.png)
参考:
cocos-lua学习笔记(五)cocos2d-Lua类的实现
标签:面向对象 obj article col tor xxx 语法糖 color return
原文地址:https://www.cnblogs.com/losophy/p/9521248.html