SpriteKit Game: Moving Gameplay Просмотр

введите описание изображения здесь

В настоящее время я работаю над игрой 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)
    }
}

На самом деле, я только хочу показать экран игры частично, чтобы я мог отображать некоторую статистику, такую ​​как количество жизней и монет. Итак, как я могу переместить игровой экран так, чтобы я мог использовать оставшуюся область для отображения номеров статистики слева и снизу? Благодарю.

введите описание изображения здесь

1 ответ

Вы можете просто добавить ограничение на камеру, чтобы держать его на расстоянии 0 от игрока. Затем для вашего GUI поместите все эти узлы как дочерние элементы вашей камеры. Таким образом, графический интерфейс будет следовать за камерой независимо от того, что вы с ней делаете (даже масштабирование не повлияет на это).

Пример ограничения:

func setupCamera() {
  let distanceConstraint = SKConstraint.distance(SKRange(constantValue: 0), to: playerNode)
  cameraNode.constraints = [distanceConstraint]
}
Другие вопросы по тегам