2015-05-14 68 views
2

我正在構建一個SpriteKit「連鎖反應」遊戲,其中圓圈在「爆炸」時變大。我正在使用SKPhysicsBody(circleOfRadius:)初始化程序爲圓圈創建物理實體。調整SpriteKit的大小SKPhysicsBody使用SKPhysicsBody創建(circleOfRadius :)

不幸的是,這些物理機構似乎沒有重新調整大小,因爲圓圈變大了,而且他們沒有我可以設置的公開的.radius屬性。有什麼方法可以在SpriteKit中調整物理體的大小,還是我需要每幀創建一個新的物理體? (這是我在下面做的,代碼工作正常,但在更新循環中創建新物理體的感覺真的很低效。)

PS - 我知道用圓圈我可以很容易地使用trig來實現準確的碰撞檢測距離,但我想使用SpriteKit碰撞檢測一些其他效果。

func moveCircles(dt:CGFloat){ 
    enumerateChildNodesWithName("circle") { node, stop in 
    let c = node as! CircleSprite 
    var halfWidth = c.size.width/2.0 
    c.update(dt) // in update() exploding circles get larger. 
     if c.isExploding{ 
     // FIXME: Have to make a new physics body every update - I don't like this! 
      c.physicsBody = SKPhysicsBody(circleOfRadius: halfWidth) 
      c.physicsBody?.categoryBitMask = CollisionCategories.ExplodingCircle 
      c.physicsBody?.contactTestBitMask = CollisionCategories.Circle 
      c.physicsBody?.collisionBitMask = 0 
      c.physicsBody?.dynamic = true // the default 
     } 
    } 
} 

回答

4

您可能想要了解更多here。調整physicsBody的大小是不可能的,建議您創建一個新的physicsBody並將其分配給節點。

+0

這就是我的想法 - 我只是想知道是否有任何解決方法。在官方的Apple文檔中,我找不到這個事實,除此之外: 「物理體的特性很少修復,除了物理體區域外,大多數屬性都可以隨時更改。」 發現在這個文件的末尾:https://developer.apple.com/library/ios/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/Physics/Physics.html – tonethar

+0

多麼令人難以置信的愚蠢 - 你不能改變半徑一個圓形對撞機! – Fattie

+0

@Fattie其實這是有道理的!調整身體尺寸需要改變它的許多特性(質量/密度等),否則由於身體的變化很容易獲得非常奇怪的物理效應。 –