cocos2dx 举例说明 convertToNodeSpace 与 convertToWorldSpace 的使用

来源:互联网 发布:wowtbc数据库t6 套 编辑:程序博客网 时间:2024/05/18 00:07

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

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



convertToWorldSpace:把基于当前节点的本地坐标系下的坐标转换到世界坐标系中。

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

0 0
原创粉丝点击