Как удержать узел от перемещения (вне) другого узла

У меня есть несколько узлов квадратной формы (например, напольные плитки), идущих вдоль экрана, и я хотел бы ограничить мой узел игрока (P) перемещением внутри этих узлов.

---------------------------------
|   | P |   |   |   |   |   |   |    <- Want no movement allowed 
---------------------------------       outside of these squares.
            |   |
        -------------
        |   |   |   | ...  
        -------------

Мне интересно, есть ли элегантный способ сделать это с помощью SpriteKit Physics, который не включает размещение невидимых блоков по всему полу.

Спасибо!


person iank    schedule 14.10.2016    source источник


Ответы (2)


Объект SKConstraint описывает математическое ограничение положения или ориентации узла.

Вы можете использовать SKConstraint, чтобы держать узел на определенном расстоянии от определенной точки по горизонтальной оси:

let center = size.width/2.0, difference = CGFloat(170.0)
let leftConstraint = SKConstraint.positionX(SKRange(constantValue: center - difference))
let rightConstraint = SKConstraint.positionX(SKRange(constantValue: center + difference))    
player.constraints = [leftConstraint, rightConstraint]

Вы также можете решить включить или отключить определенное ограничение во время игры:

leftConstraint.enabled = false
person Alessandro Ornano    schedule 14.10.2016

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

person Knight0fDragon    schedule 14.10.2016