【问题标题】:What is the best way to zoom and deplace nodes?缩放和替换节点的最佳方法是什么?
【发布时间】:2017-04-04 04:44:23
【问题描述】:

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

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

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

我看到了两种可能性:

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

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

我已经尝试过第一个选项,但是缩放手势非常复杂,好像我想缩放时将 backgroundNode 向上缩放,锚点在 0;0 而不是 0.5;0.5 所以它不会缩放捏手势的位置被检测到了,但是从右下角看,不知道你看懂我的意思了。

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

你能帮帮我吗?

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

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
}

你会怎么做?

【问题讨论】:

  • 发布选项 2 (SKCameraNode) 的当前代码。这就是我要做的事情。或者,发布两次尝试的代码,然后选择我们应该提供帮助的代码
  • 仅供参考:如果您可以使用选项 1,请尝试找到将锚点更改为 0.5、0.5 的方法。通常只涉及位置的变化
  • @Nik 我刚刚发布了代码,我认为 SKCameraNode 选项会做得更好,但我无法让它工作

标签: swift sprite-kit uipinchgesturerecognizer skcameranode


【解决方案1】:

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

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

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

【讨论】:

  • 好的,感谢您的帖子,我设法使用 UIPanGestureRecognizer 让相机正常移动。现在如何使用 UIPinchGestureRecognizer 正确缩放相机?
猜你喜欢
  • 2010-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 1970-01-01
  • 2015-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多