1.錨點通常是圖形的幾何中心,
AnchorPoint(x,y)的兩個參量x和y的取值通常都是0到1之間的實數,表示錨點相對於節點長寬的位置。
例如,把節點左下角作為錨點,值為(0,0);
把節點的中心作為錨點,值為(0.5,0.5);
把節點右下角作為錨點,值為(1,0)。
精靈的AnchorPoint默認值為(0.5,0.5),其他節點的默認值為(0,0),如CCLayer。
相關的操作:setAnchorpoint(0,0);
影響: 1.掛載位置, 2.縮放, 3.旋轉
2.忽略錨點:
spr->ignoreAnchorPointForPosition(true);
對於CCLayer默認是忽略錨點的,忽略錨點則錨點位置在(0,0)
注意:忽略錨點,錨點位置不在幾何中心,而在原點
myAnchorPoint.h
#pragma once #include "cocos2d.h" USING_NS_CC; class MyAnchorPoint:public CCLayer { public: static CCScene * scene(); static MyAnchorPoint *create(); bool init(); /*原始繪圖*/ void draw(); /*屏幕尺寸的大小*/ CCSize winSize; };
myAnchorPoint.cpp
#include "MyAnchorPoint.h" /*創建一個場景*/ CCScene * MyAnchorPoint::scene() { CCScene * scene = CCScene::create(); MyAnchorPoint * layer = MyAnchorPoint::create(); /*獲取默認情況下的位置,即錨點的位置所在*/ CCLog("x=%g,y=%g", layer->getPositionX(), layer->getPositionY()); /*CCLayer是默認忽略錨點的*/ layer->ignoreAnchorPointForPosition(false); scene->addChild(layer); return scene; } /*創建一個圖層*/ MyAnchorPoint *MyAnchorPoint::create() { MyAnchorPoint * pRet = new MyAnchorPoint(); if (pRet && pRet->init()) { pRet->autorelease(); } else { delete pRet; pRet = NULL; } return pRet; } /*初始化圖層*/ bool MyAnchorPoint::init() { /*先初始化父類*/ CCLayer::init(); /*獲取屏幕尺寸的大小*/ winSize = CCDirector::sharedDirector()->getWinSize(); /*創建一個精靈,測試錨點對掛載位置的影響*/ //CCSprite *spr = CCSprite::create("anchor3.png"); /*創建一個精靈,測試錨點對縮放的影響*/ /*CCSprite *spr = CCSprite::create("anchor1.png"); spr->setScale(2.0f);*/ /*創建一個精靈,測試錨點對旋轉的影響*/ CCSprite *spr = CCSprite::create("anchor2.png"); /*以錨點為支點旋轉30度*/ //spr->setRotation(30.0f); /*開啟忽略錨點,測試忽略錨點對精靈的影響*/ spr->ignoreAnchorPointForPosition(true); /*設置精靈的位置*/ spr->setPosition(ccp(winSize.width/2, winSize.height/2)); /*設置錨點不同,掛載位置則不同,默認錨點是在幾何中心*/ //spr->setAnchorPoint(ccp(0, 0)); //spr->setAnchorPoint(ccp(0, 1)); /*spr->setAnchorPoint(ccp(1, 0)); spr->setAnchorPoint(ccp(1, 1));*/ /*將精靈添加進圖層*/ this->addChild(spr); return true; } void MyAnchorPoint::draw() { /*設置繪圖的顏色,默認為白色*/ ccDrawColor4B(255, 0, 0, 255); /*畫線*/ ccDrawLine(ccp(0, winSize.height / 2), ccp(winSize.width,winSize.height/2)); ccDrawColor4B(255, 255, 0, 255); ccDrawLine(ccp(winSize.width/2, 0), ccp(winSize.width/2, winSize.height)); }
