COCOS2DX坐标系(下)

COCOS2DX坐标系(下),第1张

概述转自:http://www.voidcn.com/article/p-pmrnxlkk-xy.html 游戏中经常会用到一些变换: 游戏中武器和角色在一个layer上,为了效率,会考虑将bullet, effect和 PhysicsParticle分别放到不用的层上,对应的层上使用batchnode来提高效率 武器和PhysicsParticleLauncher(粒子发射器)绑定,发射的时候,会向

转自:http://www.jb51.cc/article/p-pmrnxlkk-xy.html

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

游戏中武器和角色在一个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 boolHelloWorld::init() { ////////////////////////////// //1.superinitfirst if(!Layer::init()){ returnfalse; } //r0加入到根节点上(Layer)坐标(0,0) Sprite*r0=Sprite::create("data/pic/gun.png"); r0->setAnchorPoint(Point(0.f,0.f)); this->addChild(r0); //r1加入到r0上 Sprite*r1=Sprite::create("data/pic/gun.png"); r1->setAnchorPoint(Point(0.f,0.f)); r1->setposition(Point(100,0)); r0->addChild(r1); //r2加入到r1上 Sprite*r2=Sprite::create("data/pic/gun.png"); r2->setAnchorPoint(Point(0.f,108); List-style:decimal-leading-zero outsIDe; color:inherit; line-height:17.27272605895996px; margin:0px!important; padding:0px 3px 0px 10px!important"> r2->setposition(Point(100,20)); r1->addChild(r2); }

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

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

//获得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代码

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; 总结

以上是内存溢出为你收集整理的COCOS2DX坐标系(下)全部内容,希望文章能够帮你解决COCOS2DX坐标系(下)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1061027.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存