Проблема со SKVideoNode в SpriteKit, симулятор просто показывает серый экран - PullRequest
0 голосов
/ 29 июня 2018

Попытка запустить 'Cut Scense Video' перед входом в мою игру Игра отлично работает. Я создал отдельную сцену, которую я назвал «StartScene», чтобы воспроизвести мою сцену. Сборка удалась, но когда она добралась до фрагмента сцены на симуляторе, я получил пустой серый экран. Я выполнил поиск в Интернете и получил много проблем с изменением размера видео, однако Apple Developer говорит следующее:

При создании видео узла его свойство size инициализируется в соответствии с базовым размером видеоконтента, но вы можете изменить его, если хотите. Видеоконтент автоматически растягивается до нового размера.

Пример кода, скопированного с Apple Developer:

let sample = SKVideoNode(fileNamed: "sample.mov")
sample.position = CGPoint(x: frame.midX,
                      y: frame.midY)
addChild(sample)
sample.play()

Вот мой код в моем StartScene.swift для воспроизведения вырезанной сцены:

import SpriteKit
import GameplayKit

class StartScene: SKScene {
    override func sceneDidLoad() {
        let openingVideo = SKVideoNode(fileNamed: "MyCutScene.mp4")
        openingVideo.position = CGPoint(x: frame.midX, y: frame.midY)
        addChild(openingVideo)
        openingVideo.play()
    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        let gameSceneTemp = GameScene(fileNamed: "GameScene")
        self.scene?.view?.presentScene(gameSceneTemp!, transition: SKTransition.doorsCloseHorizontal(withDuration: 1.0))
    }
}

Возможно, это ошибка новичка в простом форматировании сцены вообще. Я думал, что это будет довольно просто. Видео сохраняется в комплекте приложений в разделе «Активы», и да, я убедился, что имя совпадает с тем, что я вставил в строку кода. Последний фрагмент кода - это просто мой переход к GameScene с функцией touchesBegan.

1 Ответ

0 голосов
/ 30 июня 2018

Я спросил друга разработчика Apple, и он понял это для меня. Вот шаги, чтобы заставить SKVideoNode играть правильно: Примечание моя сцена для этой сборки называется StartScene.

  1. Установите класс в файле StartScene.sks на StartScene enter image description here Моя проблема здесь заключается в том, что я не изменил «Custom Class» на имя моей сцены. Обязательно, новичок, я ошибаюсь.

  2. Добавьте mp4 к этапу сборки «Copy Bundle Resources» (не уверен, зачем это нужно, я не думаю, что это типичное приложение, но, возможно, игры разные) enter image description here Убедитесь, что видеофайл не только находится в файлах приложения слева, но также скопирован в область «Фазы сборки» ---> «Копировать ресурсы комплекта».

  3. В этот момент он будет воспроизводиться, но вы услышите только звук видео. Чтобы увидеть это вам нужно установить размер. Поэтому добавьте строку в функцию didMove в классе StartScene, чтобы установить размер.

    override func didMove(to view: SKView) {
    let openingVideo = SKVideoNode(fileNamed: "UncleClaryWolfIntro.mp4")
    openingVideo.anchorPoint = CGPoint(x: 0.5, y: 0.5)
    openingVideo.position = CGPoint(x: 0, y: 0)
    openingVideo.size = frame.size
    addChild(openingVideo)
    openingVideo.play()
    }
    

Все о том, как правильно выбрать размер экрана для его воспроизведения.

  1. Теперь видео должно отображаться, но соотношение сторон будет отключено. Так что в GameViewController измените эту строку

    scene.scaleMode = .aspectFill
    

    К этому

    scene.scaleMode = .fill
    

и вуаля! Видео должно воспроизводиться, и мое видео теперь воспроизводится с этим кодом, и шаги выполнены. Надеюсь, это поможет вам, как и мне. Удачного кодирования!

...