所以我一直试图找到这个问题的答案大约16个小时了。看起来应该是这么简单的事情,但苹果公司关于这方面的文件非常糟糕,我不太了解客观C。
所以我有一个SKSpriteNode,我想用它作为一个按钮。单击该按钮时,我想全屏播放mp4视频。听起来很简单吧?
我也是在游戏模板中写这个,因为我学到了很快就知道了,我只在GameScene.swift工作。
我已经进入构建阶段并将视频添加到"复制捆绑资源"。
class GameScene: SKScene {
var infoButton:SKSpriteNode!
var moviePlayer: MPMoviePlayerController!
var url: NSURL!
override func didMoveToView(view: SKView) {
// Button
let infoButtonTexture = SKTexture(imageNamed: "btn_vid")
infoButton = SKSpriteNode(texture: infoButtonTexture)
infoButton.position = CGPointMake(backgroundSprite.size.width * 0.393, backgroundSprite.size.height * 0.2437)
infoButton.userInteractionEnabled = false
infoButton.name = "infoButton"
self.addChild(infoButton)
// Video
let filePath = NSBundle.mainBundle().pathForResource("hue", ofType: "mp4")
let bundleURL = NSBundle.mainBundle()!.URLForResource("hue", withExtension: "txt")
url = NSURL(string: "hue.mp4")
moviePlayer.contentURL = NSURL.fileURLWithPath(filePath)
moviePlayer.fullscreen = true
moviePlayer.shouldAutoplay = true
moviePlayer.prepareToPlay()
}
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
/* Called when a touch begins */
for touch: AnyObject in touches {
println("Something has Been Touched")
var location:CGPoint = touch.locationInNode(self)
var node:SKNode!
node = self.nodeAtPoint(CGPoint(x: location.x, y: location.y))
if node.name {
if node.name == infoButton.name {
moviePlayer.play()
}
}
}
}
我试图删除不相关的代码。
正如您在视频部分中所注意到的,我有三种不同的方法来获取文件路径。我在所有这些上运行了println,它们按如下方式打印出来:
filePath打印为:/ Users / myname / Library / Developer / CoreSimulator / Devices / 954CB013-FB55-4846-A8E0-A2773A3563FF / data / Containers / Bundle / Application / 35DB47D4-FB78-4FBE-898B-A5B3435A0F6C / Kiosk- Wine.app/hue.mp4
bundleURL打印为:file:/// Users / myname / Library / Developer / CoreSimulator / Devices / 954CB013-FB55-4846-A8E0-A2773A3563FF / data / Containers / Bundle / Application / 35DB47D4-FB78-4FBE-898B- A5B3435A0F6C / Kiosk-Wine.app / hue.mp4
url打印为:hue.mp4(你可能已经想到了)
我在每个上面使用了moviePlayer.contentURL = NSURL.fileURLWithPath(x),其中x是filePath,bundleURL或url,错误如下:
filePath:线程:1 EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子代码= 0x0) 在“输出”窗口中,它显示: 致命错误:在展开Optional值时意外发现nil (lldb)
bundleURL:这个无法构建:调用中缺少参数isDirectory的参数
url:这个无法构建:在调用中缺少参数isDirectory的参数
我希望我已经为您提供了足够的信息以便对问题有所了解,如果没有,请告诉我,我会发布。
谢谢!
奖金问题:如果有人知道代码以识别"请点击"和"发布"对于一个触摸的精灵节点,这样当有人触摸它时,我可以改变精灵节点的纹理图像,这将是惊人的:)甚至知道我可以在哪里阅读。
答案 0 :(得分:0)
试试这个:
let url = NSBundle.mainBundle().URLForResource("hue", withExtension: "mp4")
moviePlayer.contentURL = url
moviePlayer.fullscreen = true
moviePlayer.shouldAutoplay = true
moviePlayer.prepareToPlay()
我没有很多文件经验,但这是一个stackoverflow用户在某篇文章中建议的,当时我正在寻找一种在我的应用中播放视频的方法。