好的,来自 SKFieldNode 文档,在 region 属性下:
A field node applies its effect to all physics bodies that are partially or completely inside its region. The default value is a region of infinite size.
由此我了解到,一旦连接到节点的物理体的一部分进入场节点上的 SKRegion(“部分或完全在区域内”),场将开始作用于 body 。
所以我开始使用场,但发现只有当 body 的中心在区域内而不是任何部分时,它们才开始作用于物理体 body 。
这是我写的代码:
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))
}
}
}
(我将形状节点添加到场以查看它的区域在哪里结束,并将中心添加到球以使其运行时清楚地表明场仅在中心位于该区域时起作用。)
当我运行它时,只有当球的中心位于区域内时, field 才会开始作用于球。在我看来,根据文档,这不是应该发生的事情。在添加之前我没有更改字段节点的任何属性,所以我期望标准行为。
我不知道我误解了文档,或者我必须在场上设置一些其他属性,以便它作用于任何部分在其区域内的物理体。
最佳答案
让 ball
在它们立即接触时受到 field
影响的一种解决方法是扩大 field
的区域(半径)。像这样的东西:
field.region = SKRegion(radius: shapeRadius + ballRadius)
关于ios - 具有圆形区域的 SKFieldNode 仅在中心位于区域内时影响主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33312914/