码迷,mamicode.com
首页 > 其他好文 > 详细

cocos2dx游戏开发学习笔记3-lua面向对象分析

时间:2014-05-18 05:19:55      阅读:298      评论:0      收藏:0      [点我收藏+]

标签:blog   class   code   c   ext   int   

在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)




cocos2dx游戏开发学习笔记3-lua面向对象分析,布布扣,bubuko.com

cocos2dx游戏开发学习笔记3-lua面向对象分析

标签:blog   class   code   c   ext   int   

原文地址:http://blog.csdn.net/wulibin136/article/details/25952961

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!