Проблема с SKVideoNode в SpriteKit, Симулятор просто показывает серый экран

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

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

Пример кода, который я скопировал из 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.


person Brantley    schedule 29.06.2018    source источник
comment
Спасибо за редактирование @rmaddy. Также было бы полезно, если бы я предоставил спецификации видео, которое я пытаюсь воспроизвести: фильм MPEG-4, 25 852 717 байт (25,9 МБ на диске), 1920 × 1080, AAC, H.264, HD (1-1- 1), продолжительность 00:15   -  person Brantley    schedule 30.06.2018


Ответы (1)


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

  1. Задайте для класса в файле StartScene.sks значение StartScene введите здесь описание изображения Моя проблема в том, что я не изменил "Пользовательский класс" на имя моей сцены. Удостоверьтесь, что вы делаете, ошибка новичка мной точно.

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

  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
    

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

person Brantley    schedule 30.06.2018
comment
Я бы не рекомендовал использовать scaleMode .fill для видео. - person Knight0fDragon; 30.06.2018
comment
Спасибо за рекомендацию @Knight0fDragon. Я изменил его на .aspectFit, и он по-прежнему отлично работает! - person Brantley; 06.07.2018