Swift 缩放和取消放置节点的最佳方式是什么?

Swift 缩放和取消放置节点的最佳方式是什么?,swift,sprite-kit,uipinchgesturerecognizer,skcameranode,Swift,Sprite Kit,Uipinchgesturerecognizer,Skcameranode,我正在使用Swift 3、SpriteKit和Xcode 所以我有一个名为backgroundNode的节点,我将游戏的每个节点都附加到这个backgroundNode上 现在,我希望能够在我的游戏上放大一个捏手势,当我放大在我的游戏导航 我认为有两种可能做到这一点: 取消放置背景节点并将其比例更改为放大和缩小 使用SKCameraNode 你认为什么是最好的选择 我已经尝试了第一个选项,但是缩放手势非常复杂,就像我在缩放时向上缩放背景节点一样,锚定点位于0;0,而不是0.5;0.5,所以它

我正在使用Swift 3、SpriteKit和Xcode

所以我有一个名为backgroundNode的节点,我将游戏的每个节点都附加到这个backgroundNode上

现在,我希望能够在我的游戏上放大一个捏手势,当我放大在我的游戏导航

我认为有两种可能做到这一点:

  • 取消放置背景节点并将其比例更改为放大和缩小
  • 使用SKCameraNode
你认为什么是最好的选择

我已经尝试了第一个选项,但是缩放手势非常复杂,就像我在缩放时向上缩放背景节点一样,锚定点位于0;0,而不是0.5;0.5,所以它不会缩放检测到捏手势的位置,但是从右下角,我不知道你是否明白我的意思

对于第二种选择,我无法在不产生故障的情况下移动相机,也许我的代码是错误的,但它看起来确实是正确的

你能帮我吗

编辑:因此我使用
SKCameraNode
uipangestrerecognizer
使其工作,下面是代码:

var cam: SKCameraNode!

let panGesture = UIPanGestureRecognizer()

override func didMove(to view: SKView)
{       
    cam = SKCameraNode()
    camera = cam
    cam.position = CGPoint(x: playableRect.midWidth, y: playableRect.midHeight)
    addChild(cam)

    let panGesture = UIPanGestureRecognizer(target: self, action: #selector(GameScene.panFunction))
    view.addGestureRecognizer(panGesture)
}

func panFunction(pan : UIPanGestureRecognizer)
{
    let deltaX = pan.translation(in: view).x
    let deltaY = pan.translation(in: view).y

    cam.position.x -= deltaX
    cam.position.y += deltaY

    pan.setTranslation(CGPoint(x: 0, y: 0), in: view)
}
现在,我正在为变焦而挣扎。我尝试使用
uipinchgestrerecognizer
,但效果不如平移手势,以下是我尝试的:

var firstPinch: CGFloat = 0

var pinchGesture = UIPinchGestureRecognizer()
let panGesture = UIPanGestureRecognizer()
var cam: SKCameraNode!

override func didMove(to view: SKView)
{
    let pinchGesture = UIPinchGestureRecognizer(target: self, action: #selector(GameScene.pinchFunction))
    view.addGestureRecognizer(pinchGesture)

    let panGesture = UIPanGestureRecognizer(target: self, action: #selector(GameScene.panFunction))
    view.addGestureRecognizer(panGesture)
}

func pinchFunction(pinch : UIPinchGestureRecognizer)
{
    if UIGestureRecognizerState.began == pinch.state
    {
        firstPinch = pinch.scale
    }

    actualPinch = pinch.scale

    cam.xScale -= actualPinch - firstPinch
    cam.yScale -= actualPinch - firstPinch
}

你会怎么做?

你需要发布你的代码。我在另一个论坛上帮助了某人。他们的代码+我的答案应该给出一个大致的想法:


基本上,它包括
UIPangestureRecognitor
等,然后是一点增量比例逻辑,以调整相机的新边界。

为选项2(SKCameraNode)发布当前代码。我会这样做的。或者,发布两次尝试的代码,并选择我们应该帮助的选项供参考:如果您有选项1可以使用,请尝试找到一种方法将主播点更改为0.5,0.5。通常情况下,这只需要改变一下position@Nik我刚刚发布了代码,我认为SKCameraNode选项会做得更好,但我无法让它正常工作,所以我通过UIPangestureRecognitor成功地让相机正常运行,这要感谢您的帖子。现在,我如何使用UIPinchGestureRecognitor来正确缩放相机?