2017-07-18 53 views
0

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

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

我也试过了一个应该用手指跟着我的滑动的相机的例子,但那也没用。我卡住了,我很想听听你的建议!

+0

你说的应该很好。你能详细说明“我没有办法添加对象......我可以交互” – Fluidity

+0

你会向读者展示你的代码吗?这将帮助他们了解目前您采取的方法。 – halfer

+0

听起来像他们使用UIKit而不是SpriteKit – Knight0fDragon

回答

0

经过许多小时的搜索和测试,我能够通过将UIPanGestureRecognizer和单独的测试添加到现场的相机视图来获得工作解决方案。使用相机移动的能力可能是更好的解决方案,因为我可以用手指在地图上滚动并单击SPSpriteNodes。使用UIPan选项只是移动了我的视图,我可以将它拖出屏幕。此外,它并没有出现我可以与SKSpriteNodes进行交互,该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 
}