Проблема со 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.
1 ответ
Я спросил друга разработчика Apple, и он понял это для меня. Вот шаги, чтобы заставить SKVideoNode играть правильно:Обратите внимание, моя сцена для этой сборки называется StartScene.
Установите класс в файле StartScene.sks для StartScene Моя проблема здесь в том, что я не изменил "Custom Class" на имя моей сцены. Не сомневайся, новичок ошибся мной точно.
Добавьте mp4 к этапу сборки "Copy Bundle Resources" (не уверен, зачем это нужно, я не думаю, что это в типичном приложении, но, возможно, игры разные) Убедитесь, что видеофайл находится не только в файлах приложения слева, но также скопирован в область "Фазы сборки" -> "Копировать набор ресурсов".
В этот момент он будет воспроизводиться, но вы услышите только звук видео. Чтобы увидеть это вам нужно установить размер. Поэтому добавьте строку в функцию 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() }
Все о том, как правильно выбрать размер экрана.
Видео теперь должно показываться, но соотношение сторон будет отключено. Так что в GameViewController измените эту строку
scene.scaleMode = .aspectFill
К этому
scene.scaleMode = .fill
и вуаля! Видео должно воспроизводиться, и мое видео теперь воспроизводится с этим кодом, и шаги выполнены. Надеюсь, это поможет вам, как и мне. Удачного кодирования!