您的位置:首页 > 移动开发 > Cocos引擎

cocos2dx 举例说明 convertToNodeSpace 与 convertToWorldSpace 的使用

2016-10-22 14:34 393 查看
convertToNodeSpace:把世界坐标转换到当前节点的本地坐标系中。
//可以应用于判断子节点是否被点击,这时就需要把坐标从世界坐标系转换为父节点的坐标系。  
//当然大多数情况会用CCMenu,但有时CCMenu就不适用了,比如长按触发响应的时候。  
void HelloWorld::myInit14()  
{  
    CCSize size = CCDirector::sharedDirector()->getWinSize();  
      
    //创建父节点  
    CCSprite* back = CCSprite::create("ui_miss_butt_bj2song.png");  
    back->setPosition(ccp(size.width*0.5, size.height*0.5));  
    this->addChild(back,1,123);  
      
    //创建子节点  
    CCSprite* buttonSP = CCSprite::create("team_ok_butt.png");  
    buttonSP->setPosition(ccp(back->getContentSize().width*0.8, back->getContentSize().height*0.5));  
    back->addChild(buttonSP,1,321);  
      
}  
  
bool HelloWorld::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)  
{  
    beganPoint = pTouch->getLocation();  
    return true;  
}  
  
void HelloWorld::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)  
{  
    CCPoint endPoint = pTouch->getLocation();  
      
    CCSprite* back = (CCSprite*)this->getChildByTag(123);  
    CCSprite* buttonSP = (CCSprite*)back->getChildByTag(321);  
      
    //convertToNodeSpace 把世界坐标转换到当前节点的本地坐标系中。  
    CCPoint nodeBeganPoint = back->convertToNodeSpace(beganPoint);  
    CCPoint nodeEndPoint = back->convertToNodeSpace(endPoint);  
      
    //判断子节点是否被点击  
    if (buttonSP->boundingBox().containsPoint(nodeBeganPoint) && buttonSP->boundingBox().containsPoint(nodeEndPoint)) {  
        CCLog("被点到了");  
    }  
}  



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

//sp3是sp2的子节点,sp2是sp1的子节点。  
void HelloWorld::myInit13()  
{  
    CCSize size = CCDirector::sharedDirector()->getWinSize();  
      
    CCSprite* sp1 = CCSprite::create("Icon.png");  
    sp1->setPosition(ccp(size.width*0.5, size.height*0.5));  
    this->addChild(sp1);  
      
    CCSprite* sp2 = CCSprite::create("Icon.png");  
    sp2->setColor(ccYELLOW);  
    sp2->setPosition(ccp(sp1->getContentSize().width, sp1->getContentSize().height));  
    sp1->addChild(sp2);  
      
    CCSprite* sp3 = CCSprite::create("Icon.png");  
    sp3->setColor(ccBLUE);  
    sp3->setPosition(ccp(sp2->getContentSize().width, sp2->getContentSize().height));  
    sp2->addChild(sp3);  
      
    //convertToWorldSpace:把基于当前节点的本地坐标系下的坐标转换到世界坐标系中。  
    CCPoint worldPoint = sp3->convertToWorldSpace(sp3->getAnchorPointInPoints());  
    CCLog("worldX == %f, worldY == %f",worldPoint.x,worldPoint.y);  
      
    //sp4正好覆盖掉sp3,说明转换到世界坐标系中的坐标正确。  
    CCSprite* sp4 = CCSprite::create("Icon.png");  
    sp4->setColor(ccGREEN);  
    sp4->setPosition(worldPoint);  
    this->addChild(sp4);  
}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: