1. 程式人生 > >SpriteKit改變Node錨點其物理物件位置不正確的解決

SpriteKit改變Node錨點其物理物件位置不正確的解決

在建立Node的物理物件後,預設情況下物理物件和Node的實際邊界對應的很好,因為此時Node的預設錨點是其中心位置即(0.5,0.5),不過如果我們改變了Node的錨點,就會發現其物理邊界還是保持原來的位置,這可不是我們想要的結果:

let bouncer = SKSpriteNode(imageNamed: "bouncer")
        bouncer.anchorPoint = CGPoint(x: 0.5, y: 0)
        bouncer.position = CGPoint(x: 0, y: -frame.size.height/2.0)

        bouncer.physicsBody
= SKPhysicsBody(circleOfRadius: bouncer.size.width/2.0) addChild(bouncer)

在打開了物理除錯選項之後執行App,我們可以清楚地看到實際發生了神馬:

這裡寫圖片描述

之所以Node會詭異懸空,是因為其物理物件的邊界已卡位在螢幕底部了.那為什麼Node邊界和物理邊界不對應呢?因為我們在程式碼中修改了它的錨點位置.

你可能以為物理物件也有諸如錨點之類的屬性可以調整,但是並沒有 :(

不過你可以在初始化物理物件的時候人肉定位其中心點,just like this:

bouncer.physicsBody = SKPhysicsBody(circleOfRadius: bouncer.size
.width/2.0, center: CGPoint(x: 0, y: bouncer.size.height/2.0))

我來解釋下一下center的含義:預設(0,0)是Node的中心位置,所以x不需要調整仍是0,不過y如上圖所示,需要上移半個高度.

這裡寫圖片描述

再次執行App,問題得以解決!