SpriteKit добавляет пружинное соединение к каждому узлу

Я использую SpriteKit для создания забавного пользовательского интерфейса Hotspot для проекта. Это должно быть действительно просто! Просто фоновое изображение с множеством точек. Когда вы нажимаете на точку, она увеличивается. При повторном нажатии он возвращается к своему обычному размеру и положению. Но, что более важно, каждая точка имеет физику, поэтому, когда она масштабируется, другие временно отодвигаются. Когда точки вернутся к своему нормальному масштабу, они вернутся в исходное положение.

Для достижения этого у меня есть куча SKShapeNodes, размещенных на странице. Я также создаю SKPhysicsJointSpring, который прикреплен к физическим объектам сцены и SKShapeNode.

Вот код для сцены:

override func didMoveToView(view: SKView) {

    name = "Hotspot test"
    physicsWorld.gravity = CGVectorMake(0, 0)

    let physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
    self.physicsBody = physicsBody


    for i in 1...10 {

        let j:__uint32_t = 0x1 << UInt32(i) // <- IGNORE THIS. IRRELEVANT
        let shape = DotNode(circleOfRadius: 60, name: "Ball"+String(i), id: i, bitmask: j)

        // Position objects in a circle around the center
        let degrees = (360/10)*i
        let radians = degrees.degreesToRadians
        let radius = CGFloat(300)
        let cosR = cos(radians)
        let sinR = sin(radians)
        let xPos = radius*cosR+frame.size.width/2
        let yPos = radius*sinR+frame.size.height/2

        let pos = CGPoint(x: xPos, y: yPos)
        shape.position = pos

        addChild(shape)

        let spring = SKPhysicsJointSpring.jointWithBodyA(self.physicsBody!, bodyB: shape.physicsBody!, anchorA: pos, anchorB: pos)
        spring.damping = 0.01
        physicsWorld.addJoint(spring)
    }

DotNode - это подкласс SKShapeNode. Вот как это выглядит на экране:

узлы статические

и вот как это выглядит, когда они масштабируются:

Видите проблему правильно? Они не взаимодействуют друг с другом сейчас. Я вижу, что пружинное соединение прикреплено, когда я перетаскиваю одно из них:

Есть ли причина, по которой объекты больше не взаимодействуют друг с другом?

Вот что произойдет, если вы просто удалите сустав:

Объекты толкают друг друга. Это должно быть достижимо. Что я делаю неправильно?

1 ответ

К сожалению, кажется, что это невозможно с SpriteKit. Этот пост: SKPhysicsJoint: Контакты и столкновения не работает подтверждает это.

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

Кажется, мне придется потерять пружину и просто закодировать узлы, чтобы они постоянно возвращались в исходное положение. Таким образом, когда один из них масштабируется и отталкивает других с пути, они всегда будут пытаться добраться до дома.

Другие вопросы по тегам