Итак, из документации SKFieldNode в свойстве региона:
Узел поля применяет свой эффект ко всем физическим телам, частично или полностью находящимся внутри его области. Значение по умолчанию — область бесконечного размера.
Отсюда я понимаю, что как только часть физического тела, прикрепленная к узлу, войдет в SKRegion на узле поля («частично или полностью внутри региона»), поле начнет действовать на тело.
Итак, я начал использовать поля, но обнаружил, что они начинают воздействовать на физическое тело только тогда, когда центр тела находится в области, а не какая-либо часть тела.
Вот код, который я написал:
import SpriteKit
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
backgroundColor = SKColor.whiteColor()
self.physicsWorld.gravity = CGVector(dx: 0, dy: 0)
let field = SKFieldNode.springField()
field.position = view.center
let shape = SKShapeNode(circleOfRadius: size.height / 3)
shape.fillColor = SKColor.grayColor()
field.region = SKRegion(path: shape.path!)
field.addChild(shape)
addChild(field)
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
/* Called when a touch begins */
for touch in touches {
let location = touch.locationInNode(self)
let ball = SKShapeNode(circleOfRadius: size.height / 10)
ball.position = location
ball.strokeColor = SKColor.blackColor()
ball.physicsBody = SKPhysicsBody(circleOfRadius: size.height / 10)
let center = SKShapeNode(circleOfRadius: 1)
center.strokeColor = SKColor.blackColor()
ball.addChild(center)
self.addChild(ball)
ball.physicsBody!.applyImpulse(CGVectorMake(60, 60))
}
}
}
(Я добавил узел формы к полю, чтобы увидеть, где заканчивается его область, и добавил центр к шару, чтобы было ясно, когда он работает, что поле действует только тогда, когда центр находится в области.)
Когда я запускаю его, поле начинает воздействовать на шары только тогда, когда их центр находится в пределах области. Мне кажется, что это не то, что должно происходить на основе документации. Я не изменил никаких свойств узла поля перед его добавлением, поэтому я ожидал стандартного поведения.
Я не знаю, неправильно ли я интерпретирую документацию, или есть какое-то другое свойство, которое я должен установить для поля, чтобы оно действовало на любое физическое тело, которое частично находится в пределах его области.