时间:2016-11-24来源:本站原创作者:佚名

转载请注明出处

阅读是一种智慧,转载是一种动力!

分享是一种美德!传递学习的快乐!

喜欢这篇文章,   上一篇中,向童鞋们介绍了如何自定义类binding到Lua中供给使用的教程,那么本篇将介绍利用OOP思想在在Lua中进行创建一个自定义类。

  首先Himi来向大家讲解如何在Lua中不binding来自定义lua类,其实这种方式在Cocos2dx的LuaSamples已经为我们做好了例子,就看童鞋们是否认真阅读了。此示例路径在你解压cocos2dx引擎包下的cocos2d-2.1rc0-x-2.1.2/samples/Lua/TestLua中的TouchesTest,如下图:

  在这个示例中Ball.lua与Paddle.lua分别作为对象进行的Lua编写,还没有看到过的童鞋请自行看下吧。

  闲言少叙,下面详细介绍使用Lua来自定义lua类的步骤:

  第一步:

  我们到Cocos2dx引擎目录下的samples/Lua/TestLua/Resources/luaScript下找到“extern.lua”文件,其内容如下所示:

--Createanclass.functionclass(classname,super)localsuperType=type(super)localclsifsuperType~="function"andsuperType~="table"thensuperType=nilsuper=nilendifsuperType=="function"or(superandsuper.__ctype==1)then--inheritedfromnativeC++Objectcls={}ifsuperType=="table"then--copyfieldsfromsuperfork,vinpairs(super)docls[k]=vendcls.__create=super.__createcls.super=superelsecls.__create=superendcls.ctor=function()endcls.__cname=classnamecls.__ctype=1functioncls.new(...)localinstance=cls.__create(...)--copyfieldsfromclasstonativeobjectfork,vinpairs(cls)doinstance[k]=vendinstance.class=clsinstance:ctor(...)returninstanceendelse--inheritedfromLuaObjectifsuperthencls=clone(super)cls.super=superelsecls={ctor=function()end}endcls.__cname=classnamecls.__ctype=2--luacls.__index=clsfunctioncls.new(...)localinstance=setmetatable({},cls)instance.class=clsinstance:ctor(...)returninstanceendendreturnclsendfunctionschedule(node,callback,delay)localdelay=CCDelayTime:create(delay)localcallfunc=CCCallFunc:create(callback)localsequence=CCSequence:createWithTwoActions(delay,callfunc)localaction=CCRepeatForever:create(sequence)node:runAction(action)returnactionendfunctionperformWithDelay(node,callback,delay)localdelay=CCDelayTime:create(delay)localcallfunc=CCCallFunc:create(callback)localsequence=CCSequence:createWithTwoActions(delay,callfunc)node:runAction(sequence)returnsequenceend

  这个Lua中提供了3个方法:第二个函数与第三个函数分别是更新函数与序列动作函数,很easy不多说。

  我们主要   class(classname,super),此函数可以用于创建我们自定义lua类

  第一个参数:自定义类名

  第二个参数:自定义类所继承的父类

  至于其中的实现,大家需要掌握Lua的语言与程序设计,比较容易理解的。

  第二步:我们自定义一个精灵类,且继承CCSprite,其文件名Himi这里随便起的是“MySprite.lua”,如下:

require"extern"--导入模板,作用调用其class函数MySprite=class("MySprite",function(fileName)returnCCSprite:create(fileName)end)MySprite.__index=MySprite--用于访问MySprite.type=0--自定义属性functionMySprite:createMS(fileName,_type)--自定义构造函数localmySprite=MySprite.new(fileName)mySprite:myInit(_type)returnmySpriteendfunctionMySprite:myInit(_type)--自定义函数self.type=_typeend

  比较简单不赘述。

  测试Lua代码:

localfontT=CCLabelTTF:create("在Lua中使用OOP思想创建自定义lua类-byHimi","Verdana-BoldItalic",20)fontT:setPosition(ccp(,))mainLayer:addChild(fontT)localsp=MySprite:createMS("Icon.png",1)sp:setPosition(ccp(,))mainLayer:addChild(sp)

  运行截图如下:

  OK,本篇就到这里。

  文章转载自黑米GAMEDEV街区









































白癜风根治的方法
白癜风能治好吗

转载请注明原文网址:http://www.gzdatangtv.com/bcyykf/1815.html
------分隔线----------------------------