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
}
}
}
這就是我的想法 - 我只是想知道是否有任何解決方法。在官方的Apple文檔中,我找不到這個事實,除此之外: 「物理體的特性很少修復,除了物理體區域外,大多數屬性都可以隨時更改。」 發現在這個文件的末尾:https://developer.apple.com/library/ios/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/Physics/Physics.html – tonethar
多麼令人難以置信的愚蠢 - 你不能改變半徑一個圓形對撞機! – Fattie
@Fattie其實這是有道理的!調整身體尺寸需要改變它的許多特性(質量/密度等),否則由於身體的變化很容易獲得非常奇怪的物理效應。 –