2015-05-14 2 views
2

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

ответ

4

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

+0

Вот что я подумал - мне было просто интересно, есть ли что-то в этом роде. Я не могу найти этот факт нигде в официальной документации Apple, кроме этого: «Очень мало характеристик физического тела фиксированы. Вне области физического тела большинство свойств можно изменить в любое время». , найденный в конце этого документа: https://developer.apple.com/library/ios/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/Physics/Physics.html – tonethar

+0

как невероятно глупо - вы не можете изменить радиус круговой коллайдер! – Fattie

+0

@ Fattie на самом деле это имеет смысл! Изменение размера физического тела должно было бы изменить многие его свойства (масса/плотность/и т. Д.), Если бы не было слишком легко получить очень странные физические эффекты из-за физического изменения тела. –

Смежные вопросы