2

我正在使用 Swift 3、SpriteKit 和 Xcode。

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

现在我希望能够通过捏合手势来放大我的游戏,并且当我放大以在我的游戏中导航时。

我看到了两种可能性:

  • 替换背景节点并更改其比例以放大和缩小,
  • 使用 SKCameraNode

你认为最好的选择是什么?

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

对于第二个选项,我无法在没有故障效果的情况下移动相机,也许我的代码是错误的,但它看起来确实是正确的。

你能帮助我吗 ?

编辑:所以我使用SKCameraNodeand让它工作UIPanGestureRecognizer,这里是代码:

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)
}

现在我正在努力使用Zoom。我尝试使用UIPinchGestureRecognizer,但效果不如平移手势,这是我尝试过的:

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
}

你会怎么做?

4

1 回答 1

0

您需要发布您的代码。我在另一个论坛上帮助了某人。他们的代码+我的回答应该可以大致了解该怎么做:

https://forums.developer.apple.com/message/192823#192823

基本上它涉及UIPanGestureRecognizer等,然后是一些增量逻辑来调整相机的新边界。

于 2016-11-20T23:25:11.570 回答