Създавам игра за "верижна реакция" на 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
}
}
}