(原创)cocos2d-x 3.0+ lua 学习和工作(1) : 自定义创建对象方法
2014-09-21 18:30
357 查看
-- 星月相随倾心贡献~~~ -- cocos2d-x 3.0 + lua中,创建对象,用系统自带的,如下: -- example: print( "require test" ) local Test = class( "Test" ) Test.__index = Test function Test:ctor(...) print( "Test:ctor" ) end return Test -- 创建对象 local Test = require "Test" -- 这里会打印:require test -- 文件在require时,已经对外层变量进行了:初始化 local obj = Test:new() -- 这里会打印:Test:ctor -- class自带的方法new()会自动调用方法ctor(...),该方法也称为:构造函数 -- 如果要传递参数进入,可以在new(...)中传入,在构造函数中读取除了,各位自己可以去尝试,这里就不再叙述。 -- 作者这里觉得创建方法非常不好,比如我要通过标签的方式去方便其他人使用,例如: -- 这里只是示意代码,不注重代码质量 -- file:a g.Test = require "Test" -- file:b local obj = g.Test:new() -- file:c local obj = g.Test:new() -- 引入文件 require "a.lua" require "b.lua" require "c.lua" -- 看出其他人调用是非常方便的 -- 但是如果改成: -- 引入文件 require "b.lua" -- error: 找不到g.Test require "c.lua" -- error: 找不到g.Test require "a.lua" -- 需要用户自己注意引入的顺序 --- bug——1 -- 这个问题,就是文件require时,就已经初始化了变量。 -- 再看一个例子,例如: -- file:test中增加一个全局参数 g.t = 3 -- file:test2 local Test2 = class( "Test2" ) local m = g.t * 10 -- 使用test文件中的 ... return Test2 -- file:a g.Test2 = require "Test2" -- error: g.t是一个nil值 g.Test = require "Test" -- 可以看到,这个需要很仔细的了解每一个文件,顺序的初始化,文件少的话,还能理清顺序,但是文件多起来,就很难维护 ----- bug——2 -- 另外:一个项目不是一个人完成的,其他人不可能知道你需要的初始化顺序,这样就导致问题了 ---- bug——3 -- 还有一个问题就是:require一个文件,并创建了一个全局对象,但是对象的数据还没有创建。这时候其他文件中,在外层数据中使用全局对象数据,则会获得一个nil值。 ---- bug——4 -- example -- file: a a = class( "a" ) -- 全局 a.__index = a function a:set( t ) a.t = t end function a:get() return a.t end return a -- file: b local a = require "a" local m = a.get() * 10 return m -- require g.a = require "a" g.b = require "b" -- error: g.get() return a nil value -- 其他操作 a:set( 5 ) require "b" -- m = 50 -- 这时希望在a设置了值之后再创建b,而不是在一个文件中创建所有。但同时有需要方便其他人使用,这个怎么办呢??? -- 方法如下: -- file: type g.a = "a" g.b = "b" -- 定义创建对象函数: function createInst( a, ... ) local CLS = class( require "".. a ) -- 这个忘记了是:require "" .. a 还是 require tostring(a),读者自己试用一下咯~~~~汗~~!!! local cls = CLS:new() if cls and cls.init then cls:init( ... ) -- 调用对象初始化方法: 传递参数 end return cls -- 返回对象 end -- 创建对象 require "type" local obj = createInst( g.a ) obj:set( 5 ) local b = createInst( g.b ) -- 为什么不直接在 new 中传递参数??? -- 作者自己有自己的看法:也就是说作者会在ctor(...)中做一些基本的事情,把两个区分开来,只是为了更方便的管理~~!!!! -- 终于把这章写完,希望对各位有帮助~ -- lua我也是初学者,所以有些地方可能写的不好,或者有更好的方法去实现,希望各位能多多指教,多多指导,星月会努力改进!!! -- 感谢各位花时间阅读本人的作品,谢谢~~~祝各位都能大展宏图,万事顺利~~~下一章节见~~~~
作者使用 cocos2d-x 3.0 + lua学习和工作心得,未经作者允许,请勿转载!在此谢谢各位手下留情~~~
本文没有获得作者本人同意,不得转载,否则必追究相关责任。转载请注明出处!!~~
原文地址:/article/6607887.html
相关文章推荐
- (原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(7): 其他table方法
- (原创) cocos2d-x 3.0+ lua 学习和工作(3) : 子类遍历所有父类特定方法
- (原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(5): 计算table元素个数:table.nums
- (原创) cocos2d-x 3.0+ lua 学习和工作(5) : table的remove的坑
- (原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(5): 返回指定表格中的所有键(key):table.keys
- (原创)cocos2d-x 3.0+ lua 学习和工作(2) : 单一继承简单介绍
- (原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(3): 深度克隆clone()
- (原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(8): 生成只读table
- (原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(2): 检查
- (原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(4): handler
- (原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(1): printf 和math扩展
- (原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(6): 合并表格:table.merge
- cocos2d-x 3.0 导出自定义类到lua的方法详细步骤
- Cocos2d-x教程 Lua脚本(3) Lua中如何创建"类"与"对象"
- Javascript创建自定义对象 创建Object实例添加属性和方法
- 【COCOS2DX-LUA 脚本开发之五】Lua 使用OOP(面对对象思想编程),免Binding创建自定义lua类
- 编译原理之学习 lua 3.0 (六) tag方法和可变数量参数
- [置顶] 深入浅出Javascript(三)创建自定义对象以及属性、方法
- JavaSE视频学习阶段性总结 三(类的组成,定义,构造方法;对象的创建,内存模型,参数传递)
- JavaScript 学习之 -- 修改对象创建新方法