Изменение размера 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)


Вы можете прочитать больше здесь. Изменение размера физического тела невозможно, поэтому рекомендуется создать новое физическое тело и назначить его узлу.

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