SpriteKit中的SKVideoNode出现问题,模拟器仅显示灰色屏幕

时间:2018-06-29 18:02:10

标签: ios swift sprite-kit skvideonode

在进入我的游戏版本之前,尝试运行“剪切科学视频”。游戏效果很好。我创建了一个单独的场景,我将其命名为“ 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))
    }
}

在格式化场景时,一般来说这可能是一个新手错误。我认为这将非常简单。视频已保存在Assets中的App捆绑包中,是的,我确保名称与我在代码字符串中输入的名称匹配。最后的代码只是我使用touchesBegan函数过渡到GameScene的原因。

1 个答案:

答案 0 :(得分:0)

我问了一位Apple Developer朋友,他为我找到了答案。以下是使SKVideoNode正常播放的步骤: 注意此构建的场景称为StartScene。

  1. 将StartScene.sks文件中的类设置为StartScene enter image description here 我的问题是我没有将“自定义类”更改为场景名称。确保您这样做,新手肯定会误会我。

  2. 将mp4添加到“复制捆绑包资源”构建阶段(不确定为什么需要这样做,我不认为它在典型的应用程序中使用,但是游戏可能有所不同) enter image description here 确保视频文件不仅位于左侧的App文件中,而且还应复制到“构建阶段--->复制捆绑资源”区域。

  3. 这时它将播放,但您只会听到视频的声音。要查看它,您需要设置大小。因此,在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()
    }
    

所有有关使屏幕大小适合播放屏幕的内容。

  1. 视频现在应该可以显示,但是长宽比将关闭。因此,在GameViewController中更改此行

    scene.scaleMode = .aspectFill
    

    对此

    scene.scaleMode = .fill
    

还有瞧!该视频将播放,并且我的视频现在将使用此代码播放,并完成步骤。希望这对您有所帮助,就像对我一样。 祝您编码愉快!