convertToNodeSpace:把世界坐标转换到当前节点的本地坐标系中。

  1. //可以应用于判断子节点是否被点击,这时就需要把坐标从世界坐标系转换为父节点的坐标系。
  2. //当然大多数情况会用CCMenu,但有时CCMenu就不适用了,比如长按触发响应的时候。
  3. void HelloWorld::myInit14()
  4. {
  5. CCSize size = CCDirector::sharedDirector()->getWinSize();
  6. //创建父节点
  7. CCSprite* back = CCSprite::create("ui_miss_butt_bj2song.png");
  8. back->setPosition(ccp(size.width*0.5, size.height*0.5));
  9. this->addChild(back,1,123);
  10. //创建子节点
  11. CCSprite* buttonSP = CCSprite::create("team_ok_butt.png");
  12. buttonSP->setPosition(ccp(back->getContentSize().width*0.8, back->getContentSize().height*0.5));
  13. back->addChild(buttonSP,1,321);
  14. }
  15. bool HelloWorld::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
  16. {
  17. beganPoint = pTouch->getLocation();
  18. return true;
  19. }
  20. void HelloWorld::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)
  21. {
  22. CCPoint endPoint = pTouch->getLocation();
  23. CCSprite* back = (CCSprite*)this->getChildByTag(123);
  24. CCSprite* buttonSP = (CCSprite*)back->getChildByTag(321);
  25. //convertToNodeSpace 把世界坐标转换到当前节点的本地坐标系中。
  26. CCPoint nodeBeganPoint = back->convertToNodeSpace(beganPoint);
  27. CCPoint nodeEndPoint = back->convertToNodeSpace(endPoint);
  28. //判断子节点是否被点击
  29. if (buttonSP->boundingBox().containsPoint(nodeBeganPoint) && buttonSP->boundingBox().containsPoint(nodeEndPoint)) {
  30. CCLog("被点到了");
  31. }
  32. }
  33. convertToWorldSpace:把基于当前节点的本地坐标系下的坐标转换到世界坐标系中。

    1. //sp3是sp2的子节点,sp2是sp1的子节点。
    2. void HelloWorld::myInit13()
    3. {
    4. CCSize size = CCDirector::sharedDirector()->getWinSize();
    5. CCSprite* sp1 = CCSprite::create("Icon.png");
    6. sp1->setPosition(ccp(size.width*0.5, size.height*0.5));
    7. this->addChild(sp1);
    8. CCSprite* sp2 = CCSprite::create("Icon.png");
    9. sp2->setColor(ccYELLOW);
    10. sp2->setPosition(ccp(sp1->getContentSize().width, sp1->getContentSize().height));
    11. sp1->addChild(sp2);
    12. CCSprite* sp3 = CCSprite::create("Icon.png");
    13. sp3->setColor(ccBLUE);
    14. sp3->setPosition(ccp(sp2->getContentSize().width, sp2->getContentSize().height));
    15. sp2->addChild(sp3);
    16. //convertToWorldSpace:把基于当前节点的本地坐标系下的坐标转换到世界坐标系中。
    17. CCPoint worldPoint = sp3->convertToWorldSpace(sp3->getAnchorPointInPoints());
    18. CCLog("worldX == %f, worldY == %f",worldPoint.x,worldPoint.y);
    19. //sp4正好覆盖掉sp3,说明转换到世界坐标系中的坐标正确。
    20. CCSprite* sp4 = CCSprite::create("Icon.png");
    21. sp4->setColor(ccGREEN);
    22. sp4->setPosition(worldPoint);
    23. this->addChild(sp4);
    24. }

cocos2dx 举例说明 convertToNodeSpace 与 convertToWorldSpace 的使用的更多相关文章

  1. 【COCOS2DX-游戏开发之三一】之 坐标系(下) convertToNodeSpace和convertToWorldSpace

    游戏中常常会用到一些变换: 游戏中武器和角色在一个layer上,为了效率.会考虑将bullet, effect和 PhysicsParticle分别放到不用的层上,相应的层上使用batchnode来提 ...

  2. Cocos坐标之convertToNodeSpace、convertToWorldSpace、convertToNodeSpaceAR、convertToWorldSpaceAR区别和用法

    convertToNodeSpace.convertToWorldSpace.convertToNodeSpaceAR.convertToWorldSpaceAR,在他们的下一层看到下面的注释: /* ...

  3. convertToNodeSpace和convertToWorldSpace ---实际应用

    游戏中经常会用到一些变换: 游戏中武器和角色在一个layer上,为了效率,会考虑将bullet, effect和 PhysicsParticle分别放到不用的层上,对应的层上使用batchnode来提 ...

  4. cocos2d-x坐标系详解

    cocos2d-x官方文档 笛卡尔坐标系 不同坐标系简介 笛卡尔坐标系 你可能上学的时候就已经知道“笛卡尔坐标系”了,它在几何课本里经常用到.如果你已经忘得差不多了,下面这些图片可以很快唤起你的记忆: ...

  5. Cocos2dx坐标转换

    Cocos2dx坐标转换 这段时间加班有点猛,没有太多时间来写博客了,ok,继续完成任务: 前言 这里将会重点介绍四个函数: convertToNodeSpace convertToNodeSpace ...

  6. Cocos2d-x 详解坐标系统

    这篇博文将介绍一下在cocos2dx中的一些坐标系统概念: 一. (1) OpenGL坐标系 Cocos2D-x以OpenGL和OpenGL ES为基础,所以自然支持OpenGL坐标系.该坐标系原点在 ...

  7. cocos2dx中的坐标系统

    一. (1)OpenGL坐标系 Cocos2D-x以OpenGL和OpenGL ES为基础,所以自然支持OpenGL坐标系.该坐标系原点在屏幕左下角,x轴向右,y轴向上. (2)屏幕坐标系 屏幕坐标系 ...

  8. Coordinate System

    Coordinate System Introduction of Different Coordinate Systems Cartesian Coordinate System UI Coordi ...

  9. cocos2dx游戏存储举例及其注意事项

    今天白白跟大家分享一下cocos2dx中游戏的存储及需要注意的事项 cocos2dx中自带了存储类:CCUserDefault ,倘若需要存储的数据量教大的话,建议使用数据库来存储 现在先给大家看一下 ...

随机推荐

  1. ios开发实践之UIDatePicker(已对之前无法解决的问题做了解答)

    需求:要做一个生日选择的控件,但除了选择之外还需要自定义几个控件,跟生日选择控件组合一起. 做法:自定义了一个UIImageView,并且作为背景.在这个背景view上再添加其他button和时间选择 ...

  2. 如何在大型的并且有表分区的数据库中进行DBCC CHECKDB操作

    如何在大型的并且有表分区的数据库中进行DBCC CHECKDB操作 其实这个问题已经在<SQLSERVER企业级平台管理实践>里徐老师已经讲过了,不过我想用自己的语言再讲详细一些 笔记链接 ...

  3. kAudioSessionProperty_AudioCategory 的设置

    iPhone上面有两种播放外音的模式:听筒模式和话筒模式,听筒当然是打电话时用的,那个声音当然很小了, 但是开放中,ios默认的就是这种模式,所以在播放外应的时候要加代码重新设置下,如下:       ...

  4. Python-数据库支持

    10.Python-数据库支持 使用数据库的好处: a.支持数据的并发访问,多个用户同时对基于磁盘的数据进行读写而不造成任何文件的损坏: b.支持根据多个数据字段或属性进行复杂的搜索: 1.如何操作数 ...

  5. c# 项目带皮肤一起打包发布解决办法

    c# 项目带皮肤一起打包发布解决办法 前提:c#语言   winform应用程序  皮肤为IrisSkin2 目标:在打包发布独立应用 程序时,将皮肤也一起打包发布,实现程序在其它机子安装时,皮肤效果 ...

  6. Android Phone和Pad UA区别

    很多Android开发者或者网站端都可能会困扰关于如何区分Android phone和Android Pad的ua.确实这个问题很困难,我也曾被困扰了一段时间,后来在Stackoverflow中发现了 ...

  7. Android call setting 源码分析 (上)

    Android 的 call setting 是用来设定与 simcard 相关的一些内容的应用程序,如网络,PIN等等,算是AP层.这里就选择其中一个项从源代码读下去直到底层,看看大概的结构和流程. ...

  8. 使用多个DNS供应商以缓解DDoS攻击

        随着不安全物联网(IoT)设备的激增,针对域名系统(DNS)供应商的分布式拒绝服务(DDoS)攻击在数量和规模上正在不断增加.这些攻击随之影响依赖于这些供应商进行域名解析的网站.虽然DNS供应 ...

  9. MySQL索引类型

    一.简介 MySQL目前主要有以下几种索引类型:1.普通索引2.唯一索引3.主键索引4.组合索引5.全文索引 二.语句 CREATE TABLE table_name[col_name data ty ...

  10. Java重写与重载之间的区别

    重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为. 也就是说子类 ...