結論:實踐證明這三個東西的默認坐標都是0,0 默認錨點都是0.5,0.5。
bool HelloWorld::init(){ bool bRet = false; do { CC_BREAK_IF(! CCLayer::init()); CCSprite * sprite = CCSprite::create("image1.png"); this->addChild(sprite); //獲得CCSprite的默認坐標,CCSprite設置坐標的時候是用自己的錨點位置占據在坐標上的。 CCLog("CCSprite.x=%f,CCSprite.y=%f",sprite->getPosition().x,sprite->getPosition().y); //獲得CCSprite的默認錨點 CCLog("sprite1Anchor.x=%f,sprite1Anchor.y=%f",sprite->getAnchorPoint().x,sprite->getAnchorPoint().y); //獲得CCLayer的默認坐標 CCLog("CCLayer.x=%f,CCLayer.y=%f",this->getPosition().x,this->getPosition().y); //獲得CCLayer的默認錨點 CCPoint point = this->getAnchorPoint(); CCLog("layerAnchor.x=%f,layerAnchor.y=%f",point.x,point.y); bRet = true; } while (0); return bRet;}
CCScene* HelloWorld::scene(){ CCScene * scene = NULL; do { // 'scene' is an autorelease object scene = CCScene::create(); CC_BREAK_IF(! scene); // 'layer' is an autorelease object HelloWorld *layer = HelloWorld::create(); CC_BREAK_IF(! layer); // add layer as a child to scene scene->addChild(layer); layer->show(); } while (0); // return the scene return scene;}
void HelloWorld::show(){ //獲得CCScene的默認坐標 CCScene * scene = (CCScene *)this->getParent(); CCLog("CCScene.x=%f,CCScene.y=%f",scene->getPosition().x,scene->getPosition().y); //獲得CCScene的默認錨點 CCPoint point = scene->getAnchorPoint(); CCLog("SceneAnchor.x=%f,SceneAnchor.y=%f",point.x,point.y);}
這里有一點非常值得注意,就是函數ignoreAchorPointForPosition(),這個函數的意 思是在設置節點(包括CCScene,CCLayer,CCSprite)的坐標的時候是否忽略錨點,我們都知道在設置坐標的時候就是用錨點去占據坐標的位置,如果忽略了錨點,那么就是以左下角為占據坐標的那個位置,或者說錨點就是左下角的點。 查詢官方的API得到的結論是:This is an internal method, only used by CCLayer and CCScene. Don't call it outside framework. The default value is false, while in CCLayer and CCScene are true。這個函數的默認值是false,但是對于CCScene和CCLayer它的值是true。如果是這樣的話,我們在設置CCScene和CCLayer的坐標的時候就是以 左下角為錨點的,而不是(0.5,0.5)。但是對于CCSprite來說正好是相反的,它對于這個函數的默認值就是false,也就是錨點就是它 本身的默認錨點(0.5,0.5)。
|
新聞熱點
疑難解答
圖片精選