【Cocos2dX(2.x)_Lua开发之三】★重要必看篇★在Lua中使用自定义精灵(Lua脚本与自创建类之间的访问)及Lua基础讲解
2014-03-01 17:46
741 查看
本站文章均为 李华明Himi 原创,转载务必在明显处注明:
转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/lua-2/985.html
☞
点击订阅 ☜ 本博客最新动态!及时将最新博文通知您!
本篇做起来比较累,大家请参考最新篇【COCOS2DX-LUA
脚本开发之四】使用tolua++编译pkg,从而创建自定义类让Lua脚本使用
此篇可能会在最新的cocos2dx版本中出现如下问题:
最近Himi都没有更新博文了,其实也是犹豫写本cocos2d(x)引擎书籍在做准备,目录的草稿都写好了,目录中包含的大家最感兴趣的cocos2d/x动作编辑器的详细制作流程与源码! 但是遗憾的是Himi还是腾不出时间去写;
放弃去写的另外一个原因就是因为支持我的童鞋门,在7月份就说过要为大家奉上关于cocos2dx-lua的系列教程,但是一直由于时间等问题一再拖到现在,如果Himi真要准备写书估计半年内都基本很难有时间更新博客的,当然也考虑到公司项目,最终放弃;(暂时放弃,以后有可能的话还是会写的
)
顺便说一句,关于Himi9个技术群,不论是cocos2d-iphone、cocos2dx、android还是以后陆续公布的Unity3D群,周期性的Himi和管理员们会定期清理(一切都是为了更多想学习的新童鞋考虑),希望大家进群冒泡,积极讨论。好了,废话就不多说了,从今天开始Himi为童鞋们出cocos2dx-lua的系列开发教程,希望大家还一如既往得支持;3Q
Himi 当前开发工具等版本如下:
mac: 10.8 xcode:4.4.1 cocos2dx :cocos2d-2.0-rc2-x-2.0.1
本篇介绍两个知识点: 1. Lua基础 2.在lua脚本中使用我们自定义的精灵类
一:lua基础
关于Lua的其实很早前Himi写过一篇关于cocos2dx-Lua 的基础博文了,但是是cocos2dx 1.x版本的,对于不是很熟悉的童鞋,Himi还是建议去看一看,连接:【iOS-cocos2d-X
游戏开发之八】在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途! Himi以后更新的Lua系列都是基于Cocos2dx 2.x版本的了。
二:[b]在lua脚本中使用我们自定义的精灵类[/b]
首先创建cocos2dx-lua项目,然后在项目中添加我们的自定义精灵类:这里Himi类名为:HSprite
HSprite.h:
HSprite.cpp:
以上代码不做解释了,很简单,继承CCSprite,添加一个自动释放的创建函数(createHSprite)以及一个自定义初始化函数(hspriteInit)
下面我们打开LuaCocos2d.cpp 类,这个类在项目的 libs/lua/cocos2dx_support目录下,如下图:
然后开始添加我们自定义精灵类,让Lua脚本能认识它;
步骤分为3步:
1. 注册我们的自定义类:
在LuaCocos2d.cpp类中搜索“tolua_reg_types”这个函数,然后在其中进行注册:
如下图所示:
第二步:声明我们自定义类的函数:
搜索“tolua_Cocos2d_open”这个函数,然后在其中添加如下代码:
如下图:
这里开始解释:
首先定义能让脚本认识的类函数,遵循如下:
a) tolua_cclass(tolua_S, “HSprite”, “HSprite”, “CCSprite”, NULL);
tolua_cclass声明哪个类函数,第一个状态值默认:tolua_S
后两个参数:是自定义类类名
再往后是继承的父类类名
b)添加参数开始声明:
tolua_beginmodule(tolua_S,”HSprite”);
c) 添加自定类函数:
tolua_function(tolua_S,”createHSprite”,tolua_Himi_HSprite_createHSrpite00);
第一个参数默认,第二个参数自定义类名,第三个:实现脚本与自定义类之间的转换实现函数
注意,这里有多个函数,可以继续写;
d) 结束自定义函数:
tolua_endmodule(tolua_S);
第三步:实现我们的脚本之间转换函数 tolua_Himi_HSprite_createHSrpite00
实现如下:
如下图所示:
这里Himi解释下:
童鞋们可以从第 384行的 #endif 把这个实现函数分为两部分来看,
首先是375~384之间的代码:
这里是对参数类型的判断:
tolua_isusertable 是否为”第三个参数”自定义类型
tolua_isstring 是否为字符串类型
tolua_isnoobj 结束(没有参数的判断)
然后是386~392之间的代码段:
这里是对脚本代码的解析从而调用的自定义创建的函数
最后我们修改 hello2.lua 脚本中的代码:(创建cocos2dx-lua项目默认Resources下自带的文件)
在脚本最后”– run”下代码修改如下:
这里Himi注视了另个layer的添加,添加了自己的Layer
然后将Himi自定义方法添加在脚本中,代码如下:
创建自己定义的精灵,然后进行调用缩放,旋转,设置坐标函数。
ok,运行后的接图如下:
好了,本篇就到这里,童鞋们感觉本站好的文章记得分享,转播散播哦
问题:
5楼 墓后煮屎人 2013-10-23 14:37发表 [回复]
有个问题。。系统提供的LuaCocos2d.cpp这里面有7万多行的代码。。每次打开都很慢。。能不能把我要注册的HSprite放到别的自定义类里面啊(怎么写。求教)。。而且我已经注册的HSprite在放到LuaCocos2d.cpp每次查找也太不方便了。。。。
4楼 ZuiHouDeJueQiang 2013-09-23 16:23发表 [回复]
目前我在vs2010上开发,
tolua_cclass(tolua_S, "HSprite", "HSprite", "CCSprite", NULL);
tolua_beginmodule(tolua_S,"HSprite");
tolua_function(tolua_S,"createHSprite",tolua_Himi_HSprite_createHSrpite00);
tolua_endmodule(tolua_S);这段代码中,需要将
tolua_cclass(tolua_S, "HSprite", "HSprite", "CCSprite", NULL);改成
tolua_cclass(tolua_S, "HSprite", "HSprite", "CCNode", NULL);
才能正常显示。这个好尴尬啊。。
Re: a2110 2013-09-25 19:28发表 [回复]
回复ZuiHouDeJueQiang:我是在xcode下运行,同样是这个问题,也解决了,多谢哈~!
3楼 a2110 2013-09-15 20:35发表 [回复] [引用] [举报]
照着做了一些,发现几个问题,请帮下。
1. 由于需要在LuaCocos2d.cpp中使用类HSprite,所以在LuaCocos2d.cpp中需要加入代码:#include "HSprite.h"
2. 我用的版本是cocos2d-x2.1.3, 在实现第三步(第三步:实现我们的脚本之间转换函数tolua_Himi_HSprite_createHSrpite00)时需要把,tolua_pushusertype_ccobject 改为 toluafix_pushusertype_ccobject
3. 目前我运行的结果还没成功,
CCMessageBox("create HSprite success", "Himi_Lua");这个代码已经起作用了,HSprite没有创建成功,还请楼主帮忙解决下
Re: 游子陈 2013-11-23 13:56发表 [回复] [引用] [举报]
回复a2110:还有一个问题是没有himi.png这张图片 然后就ok了。
转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/lua-2/985.html
☞
点击订阅 ☜ 本博客最新动态!及时将最新博文通知您!
本篇做起来比较累,大家请参考最新篇【COCOS2DX-LUA
脚本开发之四】使用tolua++编译pkg,从而创建自定义类让Lua脚本使用
此篇可能会在最新的cocos2dx版本中出现如下问题:
放弃去写的另外一个原因就是因为支持我的童鞋门,在7月份就说过要为大家奉上关于cocos2dx-lua的系列教程,但是一直由于时间等问题一再拖到现在,如果Himi真要准备写书估计半年内都基本很难有时间更新博客的,当然也考虑到公司项目,最终放弃;(暂时放弃,以后有可能的话还是会写的
)
顺便说一句,关于Himi9个技术群,不论是cocos2d-iphone、cocos2dx、android还是以后陆续公布的Unity3D群,周期性的Himi和管理员们会定期清理(一切都是为了更多想学习的新童鞋考虑),希望大家进群冒泡,积极讨论。好了,废话就不多说了,从今天开始Himi为童鞋们出cocos2dx-lua的系列开发教程,希望大家还一如既往得支持;3Q
Himi 当前开发工具等版本如下:
mac: 10.8 xcode:4.4.1 cocos2dx :cocos2d-2.0-rc2-x-2.0.1
本篇介绍两个知识点: 1. Lua基础 2.在lua脚本中使用我们自定义的精灵类
一:lua基础
关于Lua的其实很早前Himi写过一篇关于cocos2dx-Lua 的基础博文了,但是是cocos2dx 1.x版本的,对于不是很熟悉的童鞋,Himi还是建议去看一看,连接:【iOS-cocos2d-X
游戏开发之八】在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途! Himi以后更新的Lua系列都是基于Cocos2dx 2.x版本的了。
二:[b]在lua脚本中使用我们自定义的精灵类[/b]
首先创建cocos2dx-lua项目,然后在项目中添加我们的自定义精灵类:这里Himi类名为:HSprite
HSprite.h:
下面我们打开LuaCocos2d.cpp 类,这个类在项目的 libs/lua/cocos2dx_support目录下,如下图:
然后开始添加我们自定义精灵类,让Lua脚本能认识它;
步骤分为3步:
1. 注册我们的自定义类:
在LuaCocos2d.cpp类中搜索“tolua_reg_types”这个函数,然后在其中进行注册:
第二步:声明我们自定义类的函数:
搜索“tolua_Cocos2d_open”这个函数,然后在其中添加如下代码:
这里开始解释:
首先定义能让脚本认识的类函数,遵循如下:
a) tolua_cclass(tolua_S, “HSprite”, “HSprite”, “CCSprite”, NULL);
tolua_cclass声明哪个类函数,第一个状态值默认:tolua_S
后两个参数:是自定义类类名
再往后是继承的父类类名
b)添加参数开始声明:
tolua_beginmodule(tolua_S,”HSprite”);
c) 添加自定类函数:
tolua_function(tolua_S,”createHSprite”,tolua_Himi_HSprite_createHSrpite00);
第一个参数默认,第二个参数自定义类名,第三个:实现脚本与自定义类之间的转换实现函数
注意,这里有多个函数,可以继续写;
d) 结束自定义函数:
tolua_endmodule(tolua_S);
第三步:实现我们的脚本之间转换函数 tolua_Himi_HSprite_createHSrpite00
实现如下:
这里Himi解释下:
童鞋们可以从第 384行的 #endif 把这个实现函数分为两部分来看,
首先是375~384之间的代码:
tolua_isusertable 是否为”第三个参数”自定义类型
tolua_isstring 是否为字符串类型
tolua_isnoobj 结束(没有参数的判断)
然后是386~392之间的代码段:
最后我们修改 hello2.lua 脚本中的代码:(创建cocos2dx-lua项目默认Resources下自带的文件)
在脚本最后”– run”下代码修改如下:
ok,运行后的接图如下:
好了,本篇就到这里,童鞋们感觉本站好的文章记得分享,转播散播哦
问题:
5楼 墓后煮屎人 2013-10-23 14:37发表 [回复]
有个问题。。系统提供的LuaCocos2d.cpp这里面有7万多行的代码。。每次打开都很慢。。能不能把我要注册的HSprite放到别的自定义类里面啊(怎么写。求教)。。而且我已经注册的HSprite在放到LuaCocos2d.cpp每次查找也太不方便了。。。。
4楼 ZuiHouDeJueQiang 2013-09-23 16:23发表 [回复]
目前我在vs2010上开发,
tolua_cclass(tolua_S, "HSprite", "HSprite", "CCSprite", NULL);
tolua_beginmodule(tolua_S,"HSprite");
tolua_function(tolua_S,"createHSprite",tolua_Himi_HSprite_createHSrpite00);
tolua_endmodule(tolua_S);这段代码中,需要将
tolua_cclass(tolua_S, "HSprite", "HSprite", "CCSprite", NULL);改成
tolua_cclass(tolua_S, "HSprite", "HSprite", "CCNode", NULL);
才能正常显示。这个好尴尬啊。。
Re: a2110 2013-09-25 19:28发表 [回复]
回复ZuiHouDeJueQiang:我是在xcode下运行,同样是这个问题,也解决了,多谢哈~!
3楼 a2110 2013-09-15 20:35发表 [回复] [引用] [举报]
照着做了一些,发现几个问题,请帮下。
1. 由于需要在LuaCocos2d.cpp中使用类HSprite,所以在LuaCocos2d.cpp中需要加入代码:#include "HSprite.h"
2. 我用的版本是cocos2d-x2.1.3, 在实现第三步(第三步:实现我们的脚本之间转换函数tolua_Himi_HSprite_createHSrpite00)时需要把,tolua_pushusertype_ccobject 改为 toluafix_pushusertype_ccobject
3. 目前我运行的结果还没成功,
CCMessageBox("create HSprite success", "Himi_Lua");这个代码已经起作用了,HSprite没有创建成功,还请楼主帮忙解决下
Re: 游子陈 2013-11-23 13:56发表 [回复] [引用] [举报]
回复a2110:还有一个问题是没有himi.png这张图片 然后就ok了。
相关文章推荐
- 【Cocos2dX(2.x)_Lua开发之三】★重要必看篇★在Lua中使用自定义精灵(Lua脚本与自创建类之间的访问)及Lua基础讲解
- 【Cocos2dX(2.x)_Lua开发之三】★重要必看篇★在Lua中使用自定义精灵(Lua脚本与自创建类之间的访问)及Lua基础讲解
- 【Cocos2dX(2.x)_Lua开发之三】★重要必看篇★在Lua中使用自定义精灵(Lua脚本与自创建类之间的访问)及Lua基础讲解
- 【Cocos2dX(2.x)_Lua开发之三】★重要必看篇★在Lua中使用自定义精灵(Lua脚本与自创建类之间的访问)及Lua基础讲解
- 【Cocos2dX(2.x)_Lua开发之三】在Lua中使用自定义精灵(Lua脚本与自创建类之间的访问)及Lua基础讲解
- ★重要必看篇★在Lua中使用自定义精灵(Lua脚本与自创建类之间的访问)及Lua基础讲解
- 在Lua中使用自定义精灵(Lua脚本与自创建类之间的访问)及Lua基础讲解
- 【Cocos2dX(2.x)_Lua开发之一】★重要必看篇★Lua脚本与自创建类之间的访问 推荐
- 【COCOS2DX-LUA 脚本开发之四】使用tolua++编译pkg,从而创建自定义类让Lua脚本使用
- 【COCOS2DX-LUA 脚本开发之五】Lua 使用OOP(面对对象思想编程),免Binding创建自定义lua类
- 【COCOS2DX-LUA 脚本开发之四】使用tolua++编译pkg,从而创建自定义类让Lua脚本使用
- 【COCOS2DX-LUA 脚本开发之五】Lua 使用OOP免Binding创建自定义lua类
- 【COCOS2DX-LUA 脚本开发之五】Lua 使用OOP(面对对象思想编程),免Binding创建自定义lua类
- 【COCOS2DX-LUA 脚本开发之四】使用tolua++编译pkg,从而创建自定义类让Lua脚本使用
- 【COCOS2DX-LUA 脚本开发之五】Lua 使用OOP(面对对象思想编程),免Binding创建自定义lua类
- 【COCOS2DX-LUA 脚本开发之五】Lua 使用OOP(面对对象思想编程),免Binding创建自定义lua类
- 【COCOS2DX-LUA 脚本开发之四】使用tolua++编译pkg,从而创建自定义类让Lua脚本使用
- 【COCOS2DX-LUA 脚本开发之四】使用tolua++编译pkg,从而创建自定义类让Lua脚本使用
- COCOS2DX-LUA 脚本开发 使用tolua++编译pkg,从而创建自定义类让Lua脚本使用
- 【COCOS2DX-LUA 脚本开发之四】使用tolua++编译pkg,从而创建自定义类让Lua脚本使用