我正在尝试使用SiriRemote上的Pause按钮暂停我的游戏(SpriteKit,一个ViewController,多个SKScenes)。
我使用与菜单按钮相同的方法:
上面的作品就像菜单的魅力(我很好地浏览场景)但是Pause以某种方式传播回TVOS并暂停我的背景音乐,即使我拦截它(即不要调用超级)。我有什么想法吗?
令人惊讶的是,按下PlayPause再次无法启动音乐。
PS。我已经检查过,当我在任何其他应用程序(例如搜索/计算机,照片)中使用PlayPause按钮时,会出现相同的行为(例如音乐暂停但不恢复)。
答案 0 :(得分:1)
详细说明我上面的评论,这取决于你想要/需要什么样的手势。 识别器的优点是您可以将它们添加到任何SKScene,而不是通过gameViewController和委托/协议管理按钮按下。它更容易,也很棒。
func loadTVGameControls() {
// main (select) button
let tapMain = UITapGestureRecognizer()
tapMain.addTarget(self, action: "pressedTVRemoteSelectButton")
tapMain.allowedPressTypes = [NSNumber (integer: UIPressType.Select.rawValue)]
self.view!.addGestureRecognizer(tapMain)
// play pause
let tapPlayPause = UITapGestureRecognizer()
tapPlayPause.addTarget(self, action: "pressedTVRemotePlayPauseButton")
tapPlayPause.allowedPressTypes = [NSNumber (integer: UIPressType.PlayPause.rawValue)]
self.view!.addGestureRecognizer(tapPlayPause)
// menu
let tapMenu = UITapGestureRecognizer()
tapMenu.addTarget(self, action: "pressedTVRemoteMenuButton")
tapMenu.allowedPressTypes = [NSNumber (integer: UIPressType.Menu.rawValue)]
self.view!.addGestureRecognizer(tapMenu)
// swipe right
let rightSwipe = UISwipeGestureRecognizer(target: self, action: "swipedRightTVRemote")
rightSwipe.direction = UISwipeGestureRecognizerDirection.Right
self.view!.addGestureRecognizer(rightSwipe)
// swipe left ...
// swipe up ...
// swipe down ...
}
func pressedTVRemoteSelectButton() {
// do something
}
func pressedTVRemotePlayPauseButton() {
// do something
}
func pressedTVRemoteMenuButton() {
// do something
}
func swipedRightTVRemote() {
// do something
}
您可以针对不同的方案执行不同的方法。 在我的游戏中,我刚刚转换为tvOS,我有1个像上面的例子,而不是2个更像我的GameScene.swift
1)loadTVPauseControls()//游戏暂停时的新手势
2)loadTVGameOverControls()//游戏结束时的新手势
在更改手势或转换到新场景之前,只需使用以下方法禁用手势。
// MARK: - Disable All Gestures
func disableAllGestures() {
guard let view = view else { return }
guard view.gestureRecognizers != nil else { return }
for gesture in view.gestureRecognizers! {
if let tapRecognizer = gesture as? UITapGestureRecognizer {
view.removeGestureRecognizer(tapRecognizer)
}
if let swipeRecognizer = gesture as? UISwipeGestureRecognizer {
view.removeGestureRecognizer(swipeRecognizer)
}
}
}