SpriteKit游戏:移动游戏查看

问题描述:

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与玩家的距离。然后,对于你的GUI,把所有这些节点作为你的相机的孩子。这样,无论你做什么,gui都会跟随摄像头(即使缩放也不会影响它)。

约束例如:

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

感谢您的提示。那么如何为相机设置一个约束? –

+0

谢谢。这听起来像一个有用的提示。但我不知道魔法0是如何发挥作用的。它似乎应该是一个SKRange对象。 –

+0

这是节点之间的距离。您给它一个距离和一个目标,然后将约束分配给要限制移动的节点的约束阵列,在这种情况下,就是相机。 0本身是我立即修复的一个错误,因为您实际上可以指定一个范围,这可以提供一些平滑的相机效果。但为了使它完美地跟随播放器节点,请查看编辑。 – BadgerBadger