cocos2dx-lua中实现面向对象的封装继承

cocos2dx-lua中实现面向对象的封装继承,第1张

概述    class函数是在"cocos2d-x-3.2/cocos/scripting/lua-bindings/script/extern.lua"中定义的。 -- Create an class. function class(classname, super)     local superType = type(super)     local cls     if superType ~

class函数是在"cocos2d-x-3.2/cocos/scripting/lua-bindings/script/extern.lua"中定义的。


-- Create an class.

functionclass(classname,super)

localsuperType =type(super)

localcls


ifsuperType ~= "function"andsuperType ~= "table"then

superType =nil

super =nil

end


ifsuperType == "function"or(superandsuper.__ctype == 1)then

-- inherited from native C++ Object

cls = {}


ifsuperType == "table"then

-- copy fIElds from super

fork,vinpairs(super)docls[k] = vend

cls.__create = super.__create

cls.super = super

else

cls.__create = super

end


cls.ctor =function()end

cls.__cname = classname

cls.__ctype = 1


functioncls.new(...)

localinstance = cls.__create(...)

-- copy fIElds from class to native object

in pairs(cls)doinstance[k] = vend

instance.class = cls

instance:ctor(...)

returninstance

else

-- inherited from Lua Object

ifsuperthen

cls =clone(super)

cls.super = super

else

cls = {ctor =end}

end


cls.__cname = classname

cls.__ctype = 2-- lua

cls.__index = cls


localinstance =setMetatable({},cls)

instance.class = cls

instance:end

returncls

end


在Lua中类的概念就是table表,而上面的函数代码主要做的就是对父类super的表进行拷贝,然后再定义了两个函数cls.new(...)cls:ctor(...)。如果我们不了解上面的代码,也是没有关系的,只要我们会使用它就够了。

0、使用方法

>定义一个类:cls =class("类名","父类")

> 创建实例 :obj = cls.new()

>初始化函数:cls:ctor()在创建实例的时候,会自动调用

只要掌握这三步骤,对于我们cocos2d-x的开发已经够用了!

1、创建基类

首先创建一个Hero类,然后重写Hero类的初始化函数Hero:ctor()

再创建一个Hero类的实例对象Hero.new(),会自动调用初始化函数Hero:ctor() 。

测试输出。

注意:其中ctor()中出现的self为实例对象本身,就相当于C++类中的this



2、继承父类

在cocos2d-x开发中,经常需要继承引擎中的类,如Layer、Sprite等。

这里举例,将上面的Hero类修改一下,继承自Sprite

3、再举个例子:继承Layer类

我一般习惯在ctor()中只声明一些类的成员变量。

然后再自定义一个函数create(),将new()进行封装,然后在 create() 中调用init()函数进行实例对象的初始化工作。

这样的好处就是:在使用上就和我在C++中的使用的方式一样了。

3.1、定义一个继承于Layer的类


3.2、使用方法

> 创建包含GameLayer层的Scene场景:GameLayer:createScene()

> 创建一个GameLayer层-----------:GameLayer:create()

> 而在创建GameLayer时,也会调用自定义的初始化函数init()

> 类的成员变量,均在ctor()中进行声明即可。 总结

以上是内存溢出为你收集整理的cocos2dx-lua中实现面向对象的封装继承全部内容,希望文章能够帮你解决cocos2dx-lua中实现面向对象的封装继承所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1082437.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存