1

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

在我的捏合函数处理程序中,我有以下代码:

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 应用程序惯用的小反弹效果。真的任何关于如何使用平滑变焦的相机的连贯解释将不胜感激!

谢谢

4

1 回答 1

1

我通过子类化 SKCameraNode 并添加速度、摩擦和边缘吸引属性来实现平移和缩放期间的反弹效果。

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

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

这也提供了当用户触摸 end 时相机不会突然停止而是漂移到停止的额外效果。

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

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

于 2018-04-09T16:31:52.157 回答