我的游戏(不是主场景)中有一个场景(SpriteKit),我想要显示一个非常大的地图。我试图让这个场景根据触摸向各个方向滚动,并能够与我放置的地标进行交互。我没有太多运气,我正在寻找一些建议。
我最接近的是使用UIPanGestureRecognizer,我必须将其添加为UIView而不是SKNode。虽然我能够滚动图像(它实际上是滚动的图像)。我似乎没有办法以这样的方式添加对象,以便我可以与它们进行交互。
我还尝试了一个相机的例子,它应该用手指按住我的滑动,但这也不起作用。我被困住了,我很想听听你的建议!
答案 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
}