上一篇中,向童鞋们介绍了如何自定义类binding到Lua中供给使用的教程,那么本篇将介绍利用OOP思想在在Lua中进行创建一个自定义类。
首先Himi来向大家讲解如何在Lua中不binding来自定义lua类,其实这种方式在Cocos2dx的Lua Samples已经为我们做好了例子,就看童鞋们是否认真阅读了。此示例路径在你解压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” 文件,其内容如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 @H_301_94@ 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | - - 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 @H_301_94@ 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 function schedule(node,callback,delay) local delay = CCDelayTime:create(delay) local callfunc = CCCallFunc:create(callback) local sequence = CCSequence:createWithTwoActions(delay,callfunc) local action = CCRepeatForever:create(sequence) node:runAction(action) return action end function performWithDelay(node,delay) local delay = CCDelayTime:create(delay) local callfunc = CCCallFunc:create(callback) local sequence = CCSequence:createWithTwoActions(delay,callfunc) node:runAction(sequence) return sequence end |
这个Lua中提供了3个方法:第二个函数与第三个函数分别是更新函数与序列动作函数,很easy 不多说。
我们主要关注的是第一个函数:
class(classname,super),此函数可以用于创建我们自定义lua类
第一个参数:自定义类名
第二个参数: 自定义类所继承的父类
至于其中的实现,大家需要掌握Lua的语言与程序设计,比较容易理解的。
第二步:我们自定义一个精灵类,且继承CCSprite,其文件名Himi这里随便起的是“MySprite.lua” ,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | require "extern" - - 导入模板,作用调用其 class 函数 MySprite = class ( "MySprite" , function(filename) return CCSprite:create(filename) end ) MySprite.__index = MySprite - - 用于访问 MySprite. type = 0 - - 自定义属性 function MySprite:createMS(filename,_type) - - 自定义构造函数 local mySprite = MySprite.new(filename) mySprite:myInit(_type) return mySprite end function MySprite:myInit(_type) - - 自定义函数 self . type = _type end |
比较简单不赘述。
测试Lua代码:
1 2 3 4 5 6 7 | local FontT = cclabelTTF:create( "在Lua中使用OOP思想创建自定义lua类 -by Himi" , "Verdana-BoldItalic" , 20 ) FontT:setposition( ccp( 240 , 200 )) mainLayer:addChild(FontT) local sp = MySprite:createMS( "Icon.png" , 1 ) sp:setposition( ccp( 100 , 100 )) mainLayer:addChild( sp) |
运行截图如下:
OK,本篇就到这里。
总结以上是内存溢出为你收集整理的【COCOS2DX-LUA 脚本开发之五】Lua 使用OOP(面对对象思想编程),免Binding创建自定义lua类全部内容,希望文章能够帮你解决【COCOS2DX-LUA 脚本开发之五】Lua 使用OOP(面对对象思想编程),免Binding创建自定义lua类所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)