SKFieldNode с круглой областью, затрагивающей тела, только когда центр находится внутри области

Итак, из документации SKFieldNode, под свойством region:

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

Из этого я понимаю, что как только часть физического тела, прикрепленного к узлу, входит в 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))
        }
    }
}

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

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

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

1 ответ

Обход, чтобы позволить ball быть под влиянием field когда они коснулись сразу, это увеличить область (радиус) field, Что-то вроде:

field.region = SKRegion(radius: shapeRadius + ballRadius)

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