在SpriteKit中使用SKVideoNode出现问题,模拟器只显示灰色屏幕。

3
尝试在游戏构建之前运行“剪辑场景视频”。游戏非常好运行。我创建了一个名为“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函数。


感谢@rmaddy的编辑。如果我提供了我想要播放的视频规格,可能会更有帮助:MPEG-4电影,25,852,717字节(磁盘上的25.9 MB),1920×1080,AAC,H.264,高清(1-1-1),持续时间00:15。 - Brantley
1个回答

0

我向一个苹果开发者朋友提问,他帮我解决了问题。以下是使SKVideoNode正常播放的步骤:注意,我的场景在此构建中称为StartScene。

将StartScene.sks文件中的类设置为StartScene enter image description here 我的问题在于我没有将“Custom Class”更改为我的场景名称。请确保您这样做,这是我作为新手犯的错误。
将mp4添加到“Copy Bundle Resources”Build Phase中(不确定为什么需要这样做,在典型应用程序中似乎不需要,但游戏可能不同) enter image description here 确保视频文件不仅在左侧的应用程序文件中,还要复制到Build Phases---> Copy Bundle Resources区域。
此时它将播放,但您只能听到视频的声音。要查看它,您需要设置大小。因此,在StartScene类的didMove函数中添加一行以设置大小。
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 = .fill

然后就完成了!视频应该会播放了,我的视频现在用这个代码可以播放,已经完成了所有步骤。希望这对你有所帮助,就像对我一样。 编程愉快!


我不建议在视频中使用scaleMode.fill。 - Knight0fDragon
感谢@Knight0fDragon的推荐。我将其更改为.aspectFit,它仍然非常好用! - Brantley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接