具有圆形区域的SKFieldNode仅在中心位于区域

时间:2015-10-23 23:34:18

标签: ios sprite-kit region 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))
        }
    }
}

(我将形状节点添加到字段中以查看其所在区域的结束位置,并将中心添加到球中以使其在运行时清晰显示该字段仅在中心位于该区域时才起作用。)< / p>

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

我不知道我错误解释了文档,或者我必须在该字段上设置其他属性,以便它对其区域内部分的任何物理主体起作用。 / p>

1 个答案:

答案 0 :(得分:1)

ball立即触摸时fieldfield影响的解决方法是扩大field.region = SKRegion(radius: shapeRadius + ballRadius) 的区域(半径)。类似的东西:

   <dependency>
    <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
      <version>4.5.1</version>
   </dependency>

enter image description here