在触摸的场景中移动

时间:2017-07-18 23:04:22

标签: swift sprite-kit

我的游戏(不是主场景)中有一个场景(SpriteKit),我想要显示一个非常大的地图。我试图让这个场景根据触摸向各个方向滚动,并能够与我放置的地标进行交互。我没有太多运气,我正在寻找一些建议。

我最接近的是使用UIPanGestureRecognizer,我必须将其添加为UIView而不是SKNode。虽然我能够滚动图像(它实际上是滚动的图像)。我似乎没有办法以这样的方式添加对象,以便我可以与它们进行交互。

我还尝试了一个相机的例子,它应该用手指按住我的滑动,但这也不起作用。我被困住了,我很想听听你的建议!

1 个答案:

答案 0 :(得分:0)

经过数小时的搜索和测试,我能够通过向场景中添加摄像机视图,使用UIPanGestureRecognizer和单独的测试来获得工作解决方案。使用相机移动的能力可能是更好的解决方案,因为我可以用手指在地图上滚动并单击SPSpriteNodes。使用UIPan选项只是移动了我的视图,我可以将其拖离屏幕。此外,它似乎没有我可以与附加到被拖动的视图附加的SKSpriteNodes进行交互。我将发布我正在使用的相机代码。现在我只需要弄清楚如何添加约束!

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    let touch : UITouch = touches.first!
    let positionInScene = touch.location(in: self)
    let previousPosition = touch.previousLocation(in: self)
    let translation = CGPoint(x: (positionInScene.x) - (previousPosition.x), y: (positionInScene.y) - (previousPosition.y))

    panForTranslation(translation)
    //print(boardCamera.position)

}

func panForTranslation(_ translation: CGPoint) {
    let position = boardCamera.position
    let aNewPosition = CGPoint(x: position.x - translation.x, y: position.y - translation.y)
    boardCamera.position = aNewPosition
}