cocos2dx 举例说明 convertToNodeSpace 与 convertToWorldSpace 的使用

感谢点评与关注,欢迎转载与分享。
勤奋努力,持之以恒!

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);
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值