Sprite kit 将SKSpriteNode的移动约束到场景中的固定区域

Sprite kit 将SKSpriteNode的移动约束到场景中的固定区域,sprite-kit,Sprite Kit,如何将SKSpriteNode的手动移动约束到场景中的固定矩形区域?这个固定的矩形区域也是一个固定在场景中的SKSpriteNode。换句话说,我想约束一个对象(SKSpriteNode)的手动移动完全包含在另一个SKSpriteNode中,或者至少包含在它所占用的相同空间中。我尝试过几种不同的方法(例如,使用一个具有基于边缘的物理体的SKShapeNode),但似乎没有任何效果。这似乎应该是一项相当简单的任务。感谢您提供的任何帮助或提示。在移动代码周围添加if语句-因此,如果移动会使对象越过边

如何将SKSpriteNode的手动移动约束到场景中的固定矩形区域?这个固定的矩形区域也是一个固定在场景中的SKSpriteNode。换句话说,我想约束一个对象(SKSpriteNode)的手动移动完全包含在另一个SKSpriteNode中,或者至少包含在它所占用的相同空间中。我尝试过几种不同的方法(例如,使用一个具有基于边缘的物理体的SKShapeNode),但似乎没有任何效果。这似乎应该是一项相当简单的任务。感谢您提供的任何帮助或提示。

在移动代码周围添加if语句-因此,如果移动会使对象越过边界,请不要执行移动。e、 g

//check that a positive movement won't take your node past the right boundary
if(node.position.x + yourXMovementValue < boundaryXRight){
    //move your node
}

//same for y
//检查正向移动不会使节点越过右侧边界
if(node.position.x+yourXMovementValue
当然可以!谢谢然而,当我实现这个逻辑时,有时我的对象(视觉上)在边界附近停止,有时如果刚好超过边界就停止。这是因为touchesMoved方法无法跟上移动事件吗?没问题,很高兴您将其排序!如果您让SpriteKit将动态物理应用于节点(如重力或力),则此方法没有帮助。请至少用一句话介绍您的解决方案代码。
    let rangeX = SKRange(lowerLimit: CGFloat, upperLimit: CGFloat)
    let contraintX = SKConstraint.positionX(rangeX)
    let rangeY = SKRange(lowerLimit: CGFloat, upperLimit: CGFloat)
    let contraintY = SKConstraint.positionY(rangeY)
    yourObject.constraints = [contraintX, contraintY]