2015-01-20 7 views
0

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

До анимации: (нераскрытом) enter image description here

После анимации: (расширенный) enter image description here

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

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) 
} 
+0

Я думаю, вам нужно настроить физический мир для представления. – Kendel

+0

Я думал, что на сцене был физический мир по умолчанию? Если у меня нет сустава, объекты отталкиваются друг от друга, как ожидалось, но не сжимаются из-за отсутствия соединения –

+0

Изменение размера узла не обязательно приведет к изменению его физического состояния. В вашем GameViewController, если вы установите skView.showsPhysics = true, вы можете это увидеть. – Okapi

ответ

0

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

Решение будет использовать

SKAction.scaleYTo(endScale, duration: time) 

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

Надеюсь, это полезно.

EDIT: Я просто понял, что вы используете SKShapeNode, а не SKSpriteNode. Физический корпус масштабирования по-прежнему применяется, но я не уверен, как вы изменяете размер своих узлов (масштабирование/изменение размера пути?)