天天看點

關于AnchorPoint和setPosition

每一個繼承了CCNode的元素都一個的anchorPoint(錨點)屬性,anchorPoint和position屬性(相對于父元素的位置,通過setPosition來設定)一起決定一個CCNode的顯示位置。

錨點是相對于CCNode的一個點,它的參數是兩個數值,分别是錨點位置對contentSize的比值,例如(0,0)代表左下角,(0,1)代表左上角,(1,1代表)右上角,(1,0.5)代表右邊界的中點,(2,0.5)代表垂直于右邊界中垂線向外一個CCNode寬度的位置,以此類推

例1:

local scene = CCScene:create()
local layer = CCLayer:create()
local sprite = CCSprite:create("castle.png")
layer:addChild(sprite)
scene:addChild(layer)
CCDirector:sharedDirector():runWithScene(scene)
           

例1結果:

關于AnchorPoint和setPosition

分析:預設CCNode的Anchor位于它的中心,預設CCNode的位置是父元素layer的左下角(0,0),是以sprite的中心位于左下角位置,使得隻有右上方四分之一的城堡被顯示出來

例2:

local scene = CCScene:create()
local layer = CCLayer:create()
local sprite = CCSprite:create("castle.png")
sprite:setAnchorPoint(0,0)
layer:addChild(sprite)
scene:addChild(layer)
CCDirector:sharedDirector():runWithScene(scene)
           

例2結果:

關于AnchorPoint和setPosition

分析:設定sprite的錨點(setAnchorPoint方法)為它的左下角(0,0),預設位置是父元素layer的左下角(0,0),是以sprite的左下角被設定到了layer的左下角,使得整個城堡都顯露了出來

值得注意的一點是,預設anchorPoint是在CCNode的正中心,而一個CCNode内部相對坐标系是從左下角開始計算的

例3:

local scene = CCScene:create()
local layer = CCLayer:create()
local sprite = CCSprite:create("castle.png")
sprite:setPosition(100,100)
local sprite2 = CCSprite:create("castle.png")
sprite:addChild(sprite2)
layer:addChild(sprite)
scene:addChild(layer)
CCDirector:sharedDirector():runWithScene(scene)
           

例3結果:

關于AnchorPoint和setPosition

分析:sprite的錨點在正中心,但其相對于它的坐标系是從左下角開始計算的和它的錨點沒有關系,因為sprite2沒有既沒有指明錨點也米有指明位置,它的錨點(正中心)被放在了sprite的左下角,是以右上方這四分之一的圖像和sprite重合