Преоразмеряване на SpriteKit SKPhysicsBody, създаден с SKPhysicsBody(circleOfRadius:)

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

person tonethar    schedule 14.05.2015    source източник


Отговори (1)


Може да искате да прочетете повече тук. Преоразмеряването на physicsBody не е възможно и се препоръчва да създадете ново physicsBody и да го присвоите на възела.

person Wraithseeker    schedule 14.05.2015
comment
Това си помислих - просто се чудех дали има някакъв начин да заобиколя това. Не мога да намеря този факт никъде в официалната документация на Apple, освен този: Много малко характеристики на физическо тяло са фиксирани. Извън областта на физическото тяло, повечето свойства могат да бъдат променени по всяко време. намира се в края на този документ: developer. apple.com/library/ios/documentation/GraphicsAnimation/ - person tonethar; 15.05.2015
comment
колко невероятно глупаво - не можете да промените радиуса на окръжен колайдер! - person Fattie; 24.10.2017
comment
@Fattie всъщност това има смисъл! Преоразмеряването на физическо тяло би трябвало да промени много от неговите свойства (маса/плътност/и т.н.), ако не, би било твърде лесно да се получат много странни физически ефекти поради промяна на физическото тяло. - person Jean-Baptiste Yunès; 01.03.2018
comment
Не мога да се съглася, @Jean-BaptisteYunès ! помислете особено за 2D физика, напълно нормално е да промените радиуса на точка (много вероятно просто да зададете масата отново да кажете 1) - person Fattie; 01.03.2018
comment
Никаква маса не е свързана с плътност и площ и т.н. Това не е толкова просто, така че е достатъчно да се наложи пресъздаване на подходящо физическо тяло. - person Jean-Baptiste Yunès; 01.03.2018