ios - 具有圆形区域的 SKFieldNode 仅在中心位于区域内时影响主体

标签 ios sprite-kit region skfieldnode

好的,来自 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)

enter image description here

关于ios - 具有圆形区域的 SKFieldNode 仅在中心位于区域内时影响主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33312914/

相关文章:

iphone - Xcode:在最终的 iOS 应用程序中隐藏/保护资源文件?

Redis 缓存跨区域共享

ios7 - 如何在iOS MKMapView上达到最大缩放级别

iphone - 应用程序试图在目标 <UINavigationController : 0x2007af00> 上呈现一个无模态视图 Controller

ios - UIScrollView 偏移 contentView 中的内容

ios - SpriteKit 中的 ScrollView

iOS Sprite Kit - SKSpriteNode 的 .centerRect 属性不起作用

ios - TouchesBegan 不会在呈现的 SKScene 上触发

c# - 以整数精度合并( bool 联合)矩形区域

ios - Flexbox 在 Safari 和 IOS 中不工作