Я создаю игру «цепная реакция» SpriteKit, в которой круги становятся больше по мере того, как они «взрываются». Я использую инициализатор SKPhysicsBody(circleOfRadius:)
для создания физических тел для кругов.
К сожалению, размеры этих физических тел не изменяются по мере того, как круги становятся больше, и у них нет открытого свойства .radius
, которое я могу установить. Есть ли способ изменить размер физического тела в SpriteKit, или вместо этого мне нужно создавать новое физическое тело каждый кадр? (Это то, что я сделал ниже, и код работает нормально, но кажется действительно неэффективным создавать новые физические тела в циклах обновления.)
PS - я знаю, что с кругами я могу легко выполнить точное обнаружение столкновений, используя триггер, чтобы получить расстояния, но я хотел использовать обнаружение столкновений 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
}
}
}