首页 > 代码库 > cocos2dx游戏开发学习笔记3-lua面向对象分析
cocos2dx游戏开发学习笔记3-lua面向对象分析
在lua中,可以通过元表来实现类、对象、继承等。与元表相关的方法有setmetatable()、__index、getmetatable()、__newindex。
具体什么是元表在这里就不细说了,网上很多介绍,这里主要讲与cocos2dx相关联的部分。
在lua-binding库中extern.lua里,有如下方法:
--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 cls end通过该方法,我们可以很方便的定义一个class、继承一个class。
定义一个类:
MyClass = class("MyClass") function MyClass:ctor() print("MyClass:ctor()") end local myclass = MyClass:new()
继承一个类:
GameLayer = class("GameLayer", function() local layer = cc.Layer:create() return layer end) local gamelayer = GameLayer:new() addChild(gamelayer)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。