使用代码访问Cocos Studio场景编辑器中的CCSprite相关属性

简介:

 问题1

  

如题的问题有许多人问,其实TestCPP这个Demo中已经有明确说明(但似乎又不太明确?!)。


  示例函数见SceneEditorTest.cpp文件中的cocos2d::CCNode* SpriteComponentTest::createGameScene()处提供的如下代码:


   

1
2
3
4
5
6
7
8
9
CCNode *pNode = SceneReader::sharedSceneReader()->createNodeWithSceneFile( "scenetest/SpriteComponentTest/SpriteComponentTest.json" );
     if  (pNode == NULL)
     {
         return  NULL;
     }
     CCActionInterval*  action1 = CCBlink::create(2, 10);
     CCActionInterval*  action2 = CCBlink::create(2, 5);
     CCComRender *pSister1 =  static_cast <CCComRender*>(pNode->getChildByTag(10003)->getComponent( "CCSprite" ));
     pSister1->getNode()->runAction(action1);

  

  问题

  

  请注意,上面的解析好像绕了一个弯,使用如下代码如何呢?

1
pNode->getChildByTag(10003)->runAction(action1);

答案是肯定不行!


  类似的例子还有:

1
WIDTHOFPLACEHOLDER =m_pCurNode->getChildByTag(10006)->getContentSize().width;

  也是不行的,只能替换成如下方式:

   

1
2
CCComRender *pPlaceholder10006 =  static_cast <CCComRender*>(m_pCurNode->getChildByTag(10006)->getComponent( "CCSprite" ));
WIDTHOFPLACEHOLDER =pPlaceholder10006->getNode()->getContentSize().width; //width of placeholder

  不能只了解getChildByTag()也返回一个CCNode*,就直接使用上面表达。

  

  问题

  

  通过上面代码,可以(而且必须这样)访问到精灵组件的大小等数据,但是如果定位组件位置就不行了。例如下面:

1
CCPoint point=pPlaceholder10006->getNode()->getPosition();

这样得到的坐标只是一个(0,0)!!!

正确的方法应该是:使用如下方法:

1
CCPoint point=m_pCurNode->getChildByTag(10006)->getPosition();


  浅析


  具体原因,自然与场景编辑器的设计及后台解析器有关。尽管表面看上去绕了一个弯才引用到了相应精灵结点(及操作相应属性)。但是,这样的设计(当然包括前面两者)却具备了极大的灵活性:把CCNode与CCComponent(CCComRender类的父类)有机地结合到一起,从而才会实现在场景编辑器设计的场景中灵活引用UI编辑器设计内容,并通过后台代码进行灵活控制。也就是,使CCNode与CCComponent最终实现了统一操作目的。

















本文转自朱先忠老师51CTO博客,原文链接: http://blog.51cto.com/zhuxianzhong/1549079,如需转载请自行联系原作者




相关文章
|
机器学习/深度学习
电磁兼容EMC理论基础汇总
电磁兼容EMC理论基础汇总
352 0
|
移动开发 前端开发 iOS开发
记录一下前端H5的复制功能在ios端的兼容性问题
记录一下前端H5的复制功能在ios端的兼容性问题
1312 0
|
机器学习/深度学习 数据采集 算法
DEL编码新药预测的多种机器学习模型对比
数据集描述 数据集中每个分子具有三个构建块。该数据集用于表示分子的三个构建块是否能够与蛋白质相结合,如果能够结合标记为binds为1,否则binds为0. 格式描述如下: • id- 我们用来识别分子结合靶标对的独特example_id。 • buildingblock1_smiles- 在SMILES中,第一个构建块的结构 • buildingblock2_smiles- 在SMILES中,第二个构建块的结构 • buildingblock3_smiles- 在SMILES中,第三个构建块的结构 • molecule_smiles- 完全组装的分子的结构,在SMILES中。这包括三个构建单元
|
存储 人工智能 定位技术
战略地图|用户为先、AI驱动,以创业心态创造更大价值
9月10日,阿里巴巴集团董事会主席蔡崇信发布全员信宣布,已在当日按计划完成集团管理职务交接,由他接任集团董事会主席职务,吴泳铭出任集团CEO。这意味着,阿里巴巴完成了公司管理职务的第二次制度化交接棒,今年3月启动的自我变革快速顺利推进。 随着阿里巴巴1+6+N全新业务集群基本成型,阿里巴巴“24年来最重要变革”正给公司带来全新变化。与此同时,阿里巴巴集团CEO吴泳铭还兼任阿里云董事长与CEO,这样的任命也足以看出云计算之于阿里巴巴集团的重要性,阿里云下一步将如何发展?本文根据吴泳铭全员信和内部讲话梳理,进一步呈现变化将如何展开。
561 1
|
消息中间件 分布式计算 算法
大数据-67 Kafka 高级特性 分区 分配策略 Ranger、RoundRobin、Sticky、自定义分区器
大数据-67 Kafka 高级特性 分区 分配策略 Ranger、RoundRobin、Sticky、自定义分区器
192 3
|
分布式计算 大数据 数据处理
MaxCompute操作报错合集之编写UDF(用户自定义函数)时,报错:找不到主类,是什么原因
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
324 1
|
机器学习/深度学习 数据可视化
生存分析模型的时间依赖性ROC曲线可视化
生存分析模型的时间依赖性ROC曲线可视化
|
easyexcel
EasyExcel使用与详细说明,EasyExcel工具类(二)
EasyExcel使用与详细说明,EasyExcel工具类
1258 0
|
Linux 网络安全 开发工具
部署PXE远程安装服务
部署PXE远程安装服务
595 0