博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实习小白::(转) Cocos2d-x 3.0 开发(十)使用CocoStudio场景编辑器关联组件
阅读量:6291 次
发布时间:2019-06-22

本文共 1678 字,大约阅读时间需要 5 分钟。

1、概述

    我们有了UI交互、有了动画人物、有了物理模拟,还差最后一步——将这些元素融合起来。这就要用到cocoStudio中的场景编辑器了。这次我们要将先前我们做过的所有东西都放到一个场景中去。这项工程比看起来是要简单。上图:

 

2、创建场景

    运行CocoStudio,选择SceneEditor。进入后创建一个新的工程:MyScene。

    然后找到先前我们制作的UI部分的导出资源、动画部分的导出资源,将其复制到这个场景工程的Resource文件夹下。

 

    资源准备完成,我们就可以开始制作场景了。

    制作比较简单,就是拖拖拽拽。先更改场景大小为1024x768。动画是骨骼组件、UI是UI组件。另外,我还拖进去一个粒子。

 

    制作完成后可以点击播放看到模拟器运行的效果。

    一切ok后导出文件。

 

3、关联程序

 

    3.1大体思路

    我们使用SceneReader中的一个初始化函数来加载导出的场景文件。返回值是一个Node。场景中的每一个功能单元也都是一个Node,它们是这个 根Node的子节点。这些子Node上附加了很多组件(component)。这些component就是我们之前编辑的各种功能了。比如动画、UI、粒 子、声音、自定义属性等等。我们如果想要取到某一个component,我们就首先要找到这个子Node,然后在它上面找到相应的component,最 后对它进行操作。

    3.2载入场景、获取组件

    首先,我们运行脚本创建一个新工程:testScene。

    编译运行,确保创建正确后,将刚才导出的文件复制到Resource中。 

    下面这段代码,展示了如何创建场景与获取组件:

[cpp]
  1. //……  
  2.     auto node = SceneReader::getInstance()->createNodeWithSceneFile("MyScene.json");  
  3.     if(node)  
  4.     {  
  5.         addChild(node);  
  6.     }     
  7.   
  8.     /  
  9.     auto child = node->getChildByTag(10004);  
  10.     auto reader = (ComRender*)child->getComponent("GUIComponent");  
  11.     auto layer = (UILayer*)reader->getNode();  
  12. <span style="white-space:pre">  </span>m_layout = (Layout*)layer->getWidgetByName("Panel");  
  13. //……  

 

    其中,ComRender是一个component的包装,通过它的getNode方法能够取到我们需要的UILayer。然后我们再通过名字取到具体的layout。接下来,就与之前的关联方式相同了。

 

    3.3物理场景

    物理场景没有任何变化,先前的创建方式完全能够兼容。因为场景编辑器导出的也只是一个Node罢了,不会影响外层的Layer。 

 

    接下来的具体的关联逻辑可以看前几篇博客。代码比较多,而且都是复制粘贴比较无脑,就不复述了。也可以看文章下面提供的Demo。

 

4、总结

    通过场景编辑器,可以将先前在CocoStudio中制作的元素可视化的放到一个Node中。其意义也在于可以将程序与美术的工作分离开来。导出的文件在 程序中创建成一个有众多子节点的Node,每一个Node上都挂有自己特色的component。存在的问题之前也提到过,就是没有一个统一的导出文件做 索引,作为标志的tag不是自动管理的,可能会产生些问题。

 

    Demo下载:http://download.csdn.net/detail/fansongy/6525075

 

 

    行文至此,关于Cocos2d-x 3.0新特性 和 CocoStudio的初级使用,大体上暂时告一段落。希望在这些文章能够帮到大家。后续还是会有更新,但频率可能会有些下降。

 

    本篇博客出自,转载请注明出处,禁止用于商业用途:

转载于:https://www.cnblogs.com/dudu580231/p/4983718.html

你可能感兴趣的文章
<转>云主机配置OpenStack使用spice的方法
查看>>
java jvm GC 各个区内存参数设置
查看>>
[使用帮助] PHPCMS V9内容模块PC标签调用说明
查看>>
关于FreeBSD的CVSROOT的配置
查看>>
基于RBAC权限管理
查看>>
数学公式的英语读法
查看>>
留德十年
查看>>
迷人的卡耐基说话术
查看>>
PHP导出table为xls出现乱码解决方法
查看>>
PHP问题 —— 丢失SESSION
查看>>
Java中Object类的equals()和hashCode()方法深入解析
查看>>
数据库
查看>>
Vue------第二天(计算属性、侦听器、绑定Class、绑定Style)
查看>>
dojo.mixin(混合进)、dojo.extend、dojo.declare
查看>>
Python 数据类型
查看>>
iOS--环信集成并修改头像和昵称(需要自己的服务器)
查看>>
PHP版微信权限验证配置,音频文件下载,FFmpeg转码,上传OSS和删除转存服务器本地文件...
查看>>
教程前言 - 回归宣言
查看>>
PHP 7.1是否支持操作符重载?
查看>>
Vue.js 中v-for和v-if一起使用,来判断select中的option为选中项
查看>>