什么是錨點(AnchorPoint)


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

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM