2017-04-14 155 views
0

enter image description hereSpriteKit遊戲:移動遊戲查看

我目前工作的一個SpriteKit遊戲瓷磚編輯器。我有一個像GameScene場景(.sks)一樣的地圖。現在看起來像PacMan遊戲。 如上所示,遊戲角色停留在遊戲屏幕的中心。當用戶觸摸屏幕時,由於touchesBegan,遊戲角色將移動到該觸摸點。相機會跟隨遊戲角色。現在,我有以下幾點。

enum GameStatus: Int { 
    case waiting = 0 
    case playing = 1 
    case pausing = 2 
    case gameOver = 3 
} 

class GameScene: SKScene, SKPhysicsContactDelegate { 
    // MARK: - Variables 
    var background: SKTileMapNode! // background 
    var player: SKNode! // player 
    let cameraNode = SKCameraNode() // cameraNode 

    // MARK: - DidMove 
    override func didMove(to view: SKView) { 
     setupNodes() 
     setupCamera() 
    } 

    // MARK: - Node set up 
    func setupNodes() { 
     // background // 
     background = childNode(withName: "World") as! SKTileMapNode 

     player = childNode(withName: "heroPlaying") 
     player.physicsBody = SKPhysicsBody(circleOfRadius: 16) 
     ... 

     // game state // 
     gameState = GameStatus.playing 
    } 

    // MARK: - Camera 
    func setupCamera() { 
     cameraNode.position = player.position 
     addChild(cameraNode) 
     camera = cameraNode 
    } 
    // MARK: - Camera 

    // MARK: - Update 
    override func update(_ currentTime: TimeInterval) { 
     if gameState == .playing { 
      updateCamera() 
     } 
    } 

    func updateCamera() { 
     camera?.position = player.position 
     //camera?.position = CGPoint(x: player.position.x - 192, y: player.position.y - 192) 
    } 
} 

實際工作中,我只希望部分地顯示遊戲畫面,這樣我可以顯示一個類似的生活和硬幣數的一些統計數據。那麼我該如何移動遊戲屏幕,以便我可以使用剩餘區域向左側和底部顯示統計數字?謝謝。

enter image description here

回答

0

可以約束簡單地添加到相機使其保持在0與玩家的距離。然後,對於你的GUI,把所有這些節點作爲你的相機的孩子。這樣,無論你做什麼,gui都會跟隨攝像頭(即使縮放也不會影響它)。

約束例如:

func setupCamera() { 
    let distanceConstraint = SKConstraint.distance(SKRange(constantValue: 0), to: playerNode) 
    cameraNode.constraints = [distanceConstraint] 
} 
+0

感謝您的提示。那麼如何爲相機設置一個約束? –

+0

謝謝。這聽起來像一個有用的提示。但我不知道魔法0是如何發揮作用的。它似乎應該是一個SKRange對象。 –

+0

這是節點之間的距離。您給它一個距離和一個目標,然後將約束分配給要限制移動的節點的約束陣列,在這種情況下,就是相機。 0本身是我立即修復的一個錯誤,因爲您實際上可以指定一個範圍,這可以提供一些平滑的相機效果。但爲了使它完美地跟隨播放器節點,請查看編輯。 – BadgerBadger