在SpriteKit中限制另一个节点

时间:2015-07-12 18:34:49

标签: swift sprite-kit

我是SpriteKit的新手,尝试构建基本的Breakout游戏。我面临的问题是我无法限制屏幕内的拨片(这是另一个具有蓝色纹理的节点,如图所示)。当我移动球拍时,它超出了屏幕限制。 我已经将物理应用于屏幕区域和划桨,但没有运气。enter image description here

1 个答案:

答案 0 :(得分:1)

您的球拍不会与边缘发生碰撞,因为您是通过直接更改其位置来移动它。要参与物理模拟,必须通过设置其速度或通过向物理主体施加力或脉冲来移动桨。例如,

for touch in (touches as! Set<UITouch>) {
    let location = touch.locationInNode(self)
    if (location.x < size.width/2.0) {
        paddle.physicsBody?.applyImpulse(CGVectorMake(-scale, 0))
    }
    else {
        paddle.physicsBody?.applyImpulse(CGVectorMake(scale, 0))
    }
}

其中scale确定x维度中应用于正文的动量。

修改

或者,您可以通过

将球拍的x位置限制在设定范围内
let range = SKRange(lowerLimit: CGRectGetMinX(view.frame), upperLimit: CGRectGetMaxX(view.frame))
let constraint = SKConstraint.positionX(range)
paddle.constraints = [constraint]

将上述内容添加到didMoveToView方法。