Узлы не перемещаются, когда узел под ними удаляется

Я пытаюсь создать игру Jenga, чтобы начать с изучения того, как использовать SceneKit.

Я установил всю физику в своих сценах следующим образом (левое изображение — block.scn | правое изображение — Scene.scn с изображением сцены):

введите здесь описание изображения

Для блоков справа не задана физика напрямую, так как они являются опорными узлами, поэтому добавление физики приведет к тому, что они больше не будут работать должным образом. (Три блока только что были перемещены в сторону, чтобы конструкция могла упасть.)

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

введите здесь описание изображения

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

Я удаляю блоки с помощью node.removeFromParentNode():

// MARK: Respond to touch events
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    // Get the touch in the view
    let touch = touches.first!
    let location = touch.location(in: gameView)
    let hitList = gameView.hitTest(location, options: nil)

    // Perform operation on tapped object
    if let hitObject = hitList.first {
        let node = hitObject.node

        if node.name == "block" {
            node.removeFromParentNode()
        }
    }
}

Почему это происходит и как это исправить?


Если у вас есть вопросы, задавайте!


person George_E    schedule 09.10.2018    source источник


Ответы (1)


Потребовалось невероятно много времени, чтобы понять, что все, что мне нужно было сделать, это изменить allowsResting на false, как видно здесь в коде и в редакторе сцен:

node.physicsBody?.allowsResting = false

введите здесь описание изображения

Вам нужно сделать только одно, не нужно менять оба.

person George_E    schedule 10.10.2018