在Spritekit中使用限制平滑缩放

时间:2017-01-12 06:44:05

标签: ios sprite-kit uipinchgesturerecognizer skcameranode

我一直致力于通过SKCameraNode和捏合识别器为我的项目添加缩放功能。我的相机节点正在俯瞰包含我游戏的mainMap节点,我希望它具有有限的缩放功能。

在我的pinches函数处理程序中,我有这段代码:

func zoomView(recognizer: UIPinchGestureRecognizer){
    let currentScale = (mainScene.camera?.xScale)!
    let futureScale = (currentScale * recognizer.scale)

    if futureScale > 1.1 || futureScale < 0.5{
        recognizer.scale = 1.0
        return
    }else{
        mainScene.camera?.setScale((mainScene.camera?.xScale)! * recognizer.scale)
    }
    recognizer.scale = 1.0
    print("currentScale: \(currentScale)")
    print("recognizerScale: \(recognizer.scale)")
    print("scaleFactor: \(futureScale)\n")
}

我看过许多有些类似的问题,但他们没有这个问题。当比例接近界限值并变为1.09812164306641等值时,我倾向于对缩放产生卡顿效应,因为它似乎无法达到确切的边界值。

有没有人就如何避免这种行为提出建议?最有用的是解释如何使缩放更自然地表现在达到极限时它会对IOS应用程序产生一点点反弹效果。关于如何使用平滑变焦的相机的任何连贯的解释都将非常感激!

谢谢

1 个答案:

答案 0 :(得分:1)

我通过继承SKCameraNode并添加速度,摩擦力和边缘吸引力属性,在平移和缩放过程中实现了反弹效果。

这允许我们设置相机的速度,以便在更新时移动和缩放。当相机移动到指定范围之外时,会施加边缘吸引力,从而产生您正在寻找的反弹效果。

本质上,相机移动超过其最小值/最大值,然后轻柔地拉回到超出限制。

这也可以提供相机在用户接触结束时不会突然停止但会漂移停止的额外效果。

在我们的完整游戏内部进行开发太难了,所以我们在GitHub上制作了一个演示项目,我们可以完全专注于相机功能。

https://github.com/HumboldtCodeClub/SKCamera-Demo