SpriteKit改變Node錨點其物理物件位置不正確的解決
阿新 • • 發佈:2019-02-09
在建立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,問題得以解決!