用Cocos Studio 2.3.2制作UI界面中控件不再支持运行3d动作特效
2015-11-19 11:52
531 查看
用Cocos Studio 2.3.2制作UI界面中控件不再支持运行3d动作特效
cocos2d-x + cocos studio无疑是当下二维手游开发的利器,但是在从旧版本向新版本的升级过程中,坑坑也的确不少。看到网络上这方面的记录多如牛毛,但又大多是只言片语,甚至于最可靠的官方网站上许多文档也都十分过时。因此,深深觉得,要做成功一项开源项目的确很难,而这部分文档教程又恐怕无非一个两个员工所能为。感于此,继续记录下我这边的踏坑中的只言片论,供参考。
1.以前试验环境
cocos2d-x 2.2.3
CocoStudio 1.4.0.1
以前运行如下代码OK:
恕不再奉上运行时截图。
2.当前试验环境
Cocos2d-x 3.8.1
Cocos Studio 2.3.2
当前运行如下代码FAILED:
运行时错误截图:
跟踪源码大致分析得知:运行上述Action的主体必须是GridNode类型。其实,上面图中的_gridNodeTarget正是GridNode类型的指针。
3.cpp-tests中实例证明
参考源码文件见EffectsAdvancedTest.cpp,相关代码如下:
其中,_ target1和_target2都是NodeGrid指针类型。另外上面Waves替换成Waves3D也一样,因为二者都继承自Grid3DAction(参考下图)。
注意上述文件中有关类似的代码很多很多。
4.补充
第一,早期的上述3D动作特效只要求其运行实体对象为Node,当前版本的则要求其运行实体对象为NodeGrid,这正是上述运行时错误产生的根源。至于如何官方设计如此转换,暂不得而知。不过我还是坚信官方技术一定会朝着越来越科学高效的目标发展,尽管其过程中存在多种问题。
第二,能否通过变通方式实现UI界面中的控件运行上述3D类Action呢?经过简单分析,感觉很难,即使使用官方网站提到的自定制组件技术。记得早期版本开发过程中,就发现过不少的Studio中的控件技巧与直接在界面中添加的Node及其子类存在许多不致的方面,现在仍然如此!当然,想彻底弄清楚内在规律肯定需要花费不少时间。
5.Refs
(1)http://www.cocos.com/doc/article/index?type=cocostudio&url=/doc/cocos-docs-master//manual/studio/v4/chapter3/Extend/Directory/../WidgetExtend/zh.md
(2)http://www.cocoachina.com/bbs/read.php?tid=225481
(3)http://guandongsheng.iteye.com/blog/2091679
(4)http://my.oschina.net/Jacedy/blog/301575
本文出自 “青峰” 博客,请务必保留此出处http://zhuxianzhong.blog.51cto.com/157061/1714617
cocos2d-x + cocos studio无疑是当下二维手游开发的利器,但是在从旧版本向新版本的升级过程中,坑坑也的确不少。看到网络上这方面的记录多如牛毛,但又大多是只言片语,甚至于最可靠的官方网站上许多文档也都十分过时。因此,深深觉得,要做成功一项开源项目的确很难,而这部分文档教程又恐怕无非一个两个员工所能为。感于此,继续记录下我这边的踏坑中的只言片论,供参考。
1.以前试验环境
cocos2d-x 2.2.3
CocoStudio 1.4.0.1
以前运行如下代码OK:
UIButton* Button_Start = static_cast<UIButton*>(widget->getChildByName("Button_Start")); CCActionInterval* waves1 = CCWaves3D::create(10, CCSizeMake(15,10), 18, 5); Button_Start->runAction(CCRepeatForever::create(waves1));
恕不再奉上运行时截图。
2.当前试验环境
Cocos2d-x 3.8.1
Cocos Studio 2.3.2
当前运行如下代码FAILED:
Button* Button_Start = static_cast<Button*>(Helper::seekWidgetByName(Panel_Back, "Button_Start")); auto waves1 = Waves3D::create(10, CCSizeMake(15,10), 18, 5); Button_Start->runAction(CCRepeatForever::create(waves1));
运行时错误截图:
跟踪源码大致分析得知:运行上述Action的主体必须是GridNode类型。其实,上面图中的_gridNodeTarget正是GridNode类型的指针。
3.cpp-tests中实例证明
参考源码文件见EffectsAdvancedTest.cpp,相关代码如下:
auto waves = Waves::create(5, Size(15,10), 5, 20, true, false); auto shaky = Shaky3D::create(5, Size(15,10), 4, false); _target1->runAction( RepeatForever::create( waves ) ); _target2->runAction( RepeatForever::create( shaky ) );
其中,_ target1和_target2都是NodeGrid指针类型。另外上面Waves替换成Waves3D也一样,因为二者都继承自Grid3DAction(参考下图)。
注意上述文件中有关类似的代码很多很多。
4.补充
第一,早期的上述3D动作特效只要求其运行实体对象为Node,当前版本的则要求其运行实体对象为NodeGrid,这正是上述运行时错误产生的根源。至于如何官方设计如此转换,暂不得而知。不过我还是坚信官方技术一定会朝着越来越科学高效的目标发展,尽管其过程中存在多种问题。
第二,能否通过变通方式实现UI界面中的控件运行上述3D类Action呢?经过简单分析,感觉很难,即使使用官方网站提到的自定制组件技术。记得早期版本开发过程中,就发现过不少的Studio中的控件技巧与直接在界面中添加的Node及其子类存在许多不致的方面,现在仍然如此!当然,想彻底弄清楚内在规律肯定需要花费不少时间。
5.Refs
(1)http://www.cocos.com/doc/article/index?type=cocostudio&url=/doc/cocos-docs-master//manual/studio/v4/chapter3/Extend/Directory/../WidgetExtend/zh.md
(2)http://www.cocoachina.com/bbs/read.php?tid=225481
(3)http://guandongsheng.iteye.com/blog/2091679
(4)http://my.oschina.net/Jacedy/blog/301575
本文出自 “青峰” 博客,请务必保留此出处http://zhuxianzhong.blog.51cto.com/157061/1714617
相关文章推荐
- cocos2d-x v3.9 关于RotateTo和SkewTo的疑问
- cocos-js 格子地图的使用标记
- cocos 不是内部命令
- cocos-js实现文本提示框------根据文字的设置背景框大小
- [Cocos2d-x]创建一个新的HelloWorld
- cocos2d-x学习笔记(6)背景音乐和音效
- 在 Lua 里 使用 Cocos Studio 导出的 .csb 文件
- cocos2dx-3.5 Windows中android开发环境搭建
- 实习小白::cocos2d-x 2.2 study ---------- 长按事件处理
- cocos2d-x学习笔记(5)Value和vector
- Cocos2dx-OpenGL ES2.0教程:纹理贴图(6)
- (转载)Cocos2dx-OpenGL ES2.0教程:纹理贴图(6)
- cocos2d-x v3.9 与MoveBy和MoveTo之间的对话
- quick-cocos2d-x 3.3 gradle eclipse 打包
- Cocos2dx-OpenGL ES2.0教程:你的第一个立方体(5)
- (转载)Cocos2dx-OpenGL ES2.0教程:你的第一个立方体(5)
- 九、cocos2d-x一些实用的代码片段
- Cocos2D-X中在C++中调用JAVA的方法
- Cocos2dx-OpenGL ES2.0教程:使用VBO索引(4)
- (转载)Cocos2dx-OpenGL ES2.0教程:使用VBO索引(4)