SpriteKit 捏缩放相机
Posted
技术标签:
【中文标题】SpriteKit 捏缩放相机【英文标题】:SpriteKit pinch to zoom camera 【发布时间】:2017-06-02 19:21:27 【问题描述】:我似乎无法在任何地方找到如何实现相机捏合以放大 SpriteKit。
在我的 GameScene 中,我似乎可以通过以下方式在相机上进行放大操作:
let cameraNode = SKCameraNode()
cameraNode.position = CGPoint(x: self.frame.midX, y: self.frame.midY)
addChild(cameraNode)
camera = cameraNode
let zoomInAction = SKAction.scale(to: 0.5, duration: 1)
cameraNode.run(zoomInAction)
但我似乎无法弄清楚如何将其转换为捏拉缩放功能
【问题讨论】:
您需要在您的 SKView 中添加一个手势来处理捏合,然后将其转换到场景中 您还需要这方面的帮助吗? 【参考方案1】:这是一个对我有用的解决方案,使用手势识别器:
class GameScene: SKScene
var previousCameraScale = CGFloat()
override func sceneDidLoad()
let pinchGesture = UIPinchGestureRecognizer()
pinchGesture.addTarget(self, action: #selector(pinchGestureAction(_:)))
view?.addGestureRecognizer(pinchGesture)
@objc func pinchGestureAction(_ sender: UIPinchGestureRecognizer)
guard let camera = self.camera else
return
if sender.state == .began
previousCameraScale = camera.xScale
camera.setScale(previousCameraScale * 1 / sender.scale)
您可以轻松定义相机比例的最小值和最大值,并在需要时使用计算范围。
【讨论】:
这个答案有问题。经过几次迭代previousCameraScale
将达到无穷大。
我从来没有遇到过这个问题,但正如我所说,我为相机比例添加了边界,因为我不想允许无限缩放。另外,由于previousCameraScale
仅设置为.began
状态,我不知道它如何达到无穷大......如果你发现了,我会很高兴知道它。
我发现你是对的。以上是关于SpriteKit 捏缩放相机的主要内容,如果未能解决你的问题,请参考以下文章