Итак, я уже около 16 часов пытаюсь найти ответ на эту проблему. Кажется, это должно быть так просто, но документация Apple по этому поводу довольно плохая, и я не очень хорошо понимаю цель 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-A5Bappios /hue.mp4
bundleURL печатается как: file: /// Users / myname / Library / Developer / CoreSimulator / Devices / 954CB013-FB55-4846-A8E0-A2773A3563FF / data / Containers / Bundle / Application / 35DB47D4-FB78-4FBE-898B-A5B3435A0F6C -Wine.app/hue.mp4
url печатается как: hue.mp4 (вы, наверное, догадались)
Я использовал moviePlayer.contentURL = NSURL.fileURLWithPath (x) для каждого из них, где x - filePath, bundleURL или url, а ошибки следующие:
filePath: Thread: 1 EXC_BAD_INSTRUCTION (code = EXC_I386_INVOP, subcode = 0x0) В окне вывода отображается: фатальная ошибка: неожиданно обнаружен ноль при разворачивании необязательного значения (lldb)
bundleURL: этот не удается построить: отсутствует аргумент для параметра isDirectory в вызове
url: этот не удалось построить: отсутствует аргумент для параметра isDirectory в вызове
Я надеюсь, что я предоставил достаточно информации, чтобы вы получили хорошее представление о проблеме, если нет, дайте мне знать, и я опубликую ее.
Спасибо!
Дополнительный вопрос: если кто-то знает код для распознавания «щелчка вниз» и «отпускания» для узла спрайта при касании, чтобы я мог изменить изображение текстуры узла спрайта, когда кто-то касается его, это было бы потрясающе :) Или даже знаю, где я могу прочитать об этом.