In Lua, metadata tables can be used to implement classes, objects, and inheritance. Methods related to meta-tables include setretriable (), _ index, getretriable (), and _ newindex.
I will not elaborate on the details of the meta-table here. I will introduce it a lot on the Internet. Here I will focus on the sections associated with cocos2dx.
In the LUA-binding library, extern. Lua has the following methods:
--Create an class.function class(classname, super) 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 for k,v in pairs(super) do cls[k] = v end cls.__create = super.__create cls.super = super else cls.__create = super end cls.ctor = function() 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 = clone(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 clsendThrough this method, we can easily define a class and inherit a class.
Define a class:
MyClass = class("MyClass")function MyClass:ctor()print("MyClass:ctor()")endlocal myclass = MyClass:new()
Inherit a class:
GameLayer = class("GameLayer", function()local layer = cc.Layer:create()return layerend)local gamelayer = GameLayer:new()addChild(gamelayer)