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