Расширение SKShapeNodes с помощью соединения

У меня есть два узла SKShapeNode, которые я хочу прикрепить друг к другу. Когда я нажимаю, чтобы выполнить действие, я хочу, чтобы два узла увеличивали свою высоту, а при повторном нажатии я хочу, чтобы они втягивались. Проблема в том, что два узла не анимируются должным образом:

Перед анимацией: (без расширения) введите описание изображения здесь

После анимации: (развернуто) введите описание изображения здесь

Оба узла расширяются, но похоже, что один уходит под другой. Я бы хотел, чтобы они «отталкивали» друг друга.

override func didMoveToView(view: SKView) {
    let size = CGSize(width: view.frame.width, height: 100)

    let firstSection = SKShapeNode(rectOfSize: size)
    firstSection.physicsBody = SKPhysicsBody(rectangleOfSize: size)
    firstSection.fillColor = SKColor.purpleColor()
    firstSection.physicsBody?.affectedByGravity = false
    firstSection.position = CGPoint(x: 500, y: 400)
    firstSection.name = "section"
    self.addChild(firstSection)




    let secondSection = SKShapeNode(rectOfSize: size)
    secondSection.fillColor = SKColor.blueColor()
    secondSection.physicsBody = SKPhysicsBody(rectangleOfSize: size)
    secondSection.physicsBody?.affectedByGravity = false
    secondSection.position = CGPoint(x: 500, y: 300)
    secondSection.name = "section"
    self.addChild(secondSection)

    let joint = SKPhysicsJointSpring.jointWithBodyA(firstSection.physicsBody, bodyB: secondSection.physicsBody, anchorA: firstSection.position, anchorB: secondSection.position)

    self.physicsWorld.addJoint(joint)
}

person Kyle Decot    schedule 20.01.2015    source источник
comment
Я думаю, вам нужно настроить PhysicsWorld для просмотра.   -  person Kendel    schedule 20.01.2015
comment
Я думал, что на сцене есть физический мир по умолчанию? Если у меня нет сустава, объекты отталкивают друг друга, как ожидалось, но не сжимаются из-за отсутствия сустава   -  person Kyle Decot    schedule 20.01.2015
comment
изменение размера узла не обязательно изменит его физическое тело. Если вы установите skView.showsPhysics = true в своем GameViewController, вы увидите это.   -  person    schedule 20.01.2015


Ответы (1)


Комментарий Окапи верен. Изменение пути SKShapeNode не изменяет размер прикрепленного физического тела. Однако изменение масштаба делает.

Решением было бы использовать

SKAction.scaleYTo(endScale, duration: time)

Окапи также прав в том, что если вы хотите увидеть, что на самом деле происходит в вашей физической симуляции, вы должны установить для свойства SKViews showsPhysics значение true.

Надеюсь, это поможет.

РЕДАКТИРОВАТЬ: Я только что понял, что вы используете SKShapeNode, а не SKSpriteNode. Физическое тело масштабирования по-прежнему применяется, но я не уверен, как вы изменяете размер своих узлов (масштабирование / изменение размера пути?)

person Nightly    schedule 21.01.2015