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




  • 相关阅读:
    链表操作二——中间结点的删除等
    stack vector queue 等的实现方式<<0922
    任何和日期相关的函数都在这里<<0922
    类函数返回该类的问题<<0922
    Android学习笔记之PullToRefreshListView和BaseAdapter的使用
    记录Android学习过程中遇到的问题
    ruby appium 准备环境
    os x升级到10.10后appium不能测试通过的解决办法
    appium 在ios模拟器上面成功运行
    appium IOS真机测试
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/3925171.html
Copyright © 2020-2023  润新知