加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

COCOS2DX-游戏开发之三 坐标系

发布时间:2020-12-14 17:16:30 所属栏目:百科 来源:网络整理
导读:【COCOS2DX-游戏开发之三一】之 坐标系(下) convertToNodeSpace和convertToWorldSpace 标签:convertToNodeSpaceconvertToWorldSpace坐标系 2014-05-17 17:10 23701人阅读 评论(2) 收藏 举报 分类: 【Cocos2dX游戏开发】(50) 版权声明:本文为博主原创文

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

标签:convertToNodeSpaceconvertToWorldSpace坐标系
23701人阅读 评论(2) 收藏 举报
分类:

游戏中经常会用到一些变换:

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

武器和PhysicsParticleLauncher(粒子发射器)绑定,发射的时候,会向PhysicsParticleLayer的武器相同的位置上生成一个物理粒子特效


会经常用到convertToNodeSpace和convertToWorldSpace转换坐标


我们加三个sprite,r0,r1,r2,

r0的父节点是layer,父节点下坐标(0,100,100)

r1的父节点是r0,父节点下坐标(0,100)

r2的父节点是r1,父节点下坐标(0,20)


[cpp] view plain copy
  1. boolHelloWorld::init()
  2. {
  3. //////////////////////////////
  4. //1.superinitfirst
  5. if(!Layer::init()){
  6. returnfalse;
  7. }
  8. //r0加入到根节点上(Layer)坐标(0,0)
  9. Sprite*r0=Sprite::create("data/pic/gun.png");
  10. r0->setAnchorPoint(Point(0.f,0.f));
  11. this->addChild(r0);
  12. //r1加入到r0上
  13. Sprite*r1=Sprite::create("data/pic/gun.png");
  14. r1->setAnchorPoint(Point(0.f,0.f));
  15. r1->setPosition(Point(100,0));
  16. r0->addChild(r1);
  17. //r2加入到r1上
  18. Sprite*r2=Sprite::create("data/pic/gun.png");
  19. r2->setAnchorPoint(Point(0.f,108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> r2->setPosition(Point(100,20));
  20. r1->addChild(r2);
  21. }

如何将r2的坐标转换为世界坐标?

如何将r2的坐标转换为r0的局部坐标?

copy
//获得r2的世界坐标,两种方法
  • //方法1:以r2坐标系为起点,向根节点(世界坐标)变换,坐标必须为(0,0)
  • Pointp2world=r2->convertToWorldSpace(Point(0,0); background-color:inherit">//方法2:以r1坐标系为起点,向根节点(世界坐标)变换,坐标为r2在父节点r1内的坐标
  • p2world=r1->convertToWorldSpace(r2->getPosition());
  • //获得r2在r0坐标系中的坐标
  • //convertToNodeSpace要传入的坐标为世界坐标
  • Pointpt=r0->convertToNodeSpace(p2world);


  • 方法如上:

    工作原理详见cocos2dx代码

    copy
    PointNode::convertToWorldSpace(constPoint&nodePoint)const
  • kmMat4tmp=getNodeToWorldTransform();
  • kmVec3vec3={nodePoint.x,nodePoint.y,0};
  • kmVec3ret;
  • kmVec3Transform(&ret,&vec3,&tmp);
  • returnPoint(ret.x,ret.y);
  • kmMat4Node::getNodeToWorldTransform() kmMat4t=this->getNodeToParentTransform();
  • for(Node*p=_parent;p!=nullptr;p=p->getParent())
  • kmMat4Multiply(&t,&p->getNodeToParentTransform(),&t);
  • returnt;
  • }


  • cocos2d-x 坐标系详解: http://www.tairan.com/archives/3367


    【cocos2dx游戏开发】之坐标系(一) 点击这里

    (编辑:李大同)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

      推荐文章
        热点阅读