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 捏缩放相机的主要内容,如果未能解决你的问题,请参考以下文章

缩放 SpriteKit 游戏

使用 SpriteKit 缩放 SkSpriteNodes

SpriteKit 的相机抖动效果

SpriteKit Sprite 无法正确缩放

在 SpriteKit 中移动相机

在 SpriteKit 中将相机夹在场景的背景周围