2017-07-18 27 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 
}