1

好的,从 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))
        }
    }
}

(我将形状节点添加到该区域以查看其区域的结束位置,并将中心添加到球以在它运行时清楚地表明该区域仅在中心位于该区域中时才起作用。)

当我运行它时,只有当球的中心在该区域内时,场地才会开始作用于球。在我看来,这不是根据文档应该发生的事情。在添加之前我没有更改任何字段节点的属性,所以我期望标准行为。

我不知道我误解了文档,或者我必须在场上设置一些其他属性才能作用于部分位于其区域内的任何物理体。

4

1 回答 1

1

当他们立即接触时,让他们ball受到影响的解决field方法是扩大 的区域(半径)field。就像是:

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

在此处输入图像描述

于 2015-10-24T08:05:42.237 回答