objective-c – tvOS – 通过非Siri遥控器进行游戏控制

我正在使用Objective-C开发一款游戏. Siri遥控器通过GCMicroGamepad可以很好地工作,真正的MFi控制器可以通过GCGamepad很好地工作.但是,第三方IR遥控器在游戏中根本不起作用(iPhone上的远程应用程序或旧的Apple TV第三代遥控器也没有).

如何识别和区分这些输入?

两天后……我发现当使用第三方电视遥控器或iPhone Remote.app时,可以使用UITapGestureRecognizer正确检测Up,Down,Left,Right和Select事件.定向事件实际上对于这些类型的遥控器也是唯一的–Siri遥控器不会生成定向抽头事件.不幸的是,点击Siri遥控器或第三方或iPhone Remote.app上的选择按钮将从我的点击识别器生成一个Select事件.我需要一些方法来区分这两者.

我能找到的唯一区别因素是点击Siri遥控器还会在GCMicroGamepad上生成按钮-A按下 – 第三方遥控器或iPhone Remote.app根本不会影响GCMicroGamepad.但尝试观看GCMicroGamepad以进行点击释放事件,然后使用该事件过滤掉匹配的“选择”按钮事件是非常不优雅的.当然不推荐使用API​​;它似乎不是一个好的长期解决方案.如果我能告诉Siri遥控器在GCMicroGamepad模式下停止生成UI事件,那将是非常好的.

解决方法

我现在无法对此进行测试,但您可以通过将controllerUserInteractionEnabled属性设置为false的 GCEventViewController来区分Siri Remote与第三方远程.这样,Siri Remote输入不应传递给UIKit(当GCEventViewController是第一个响应者时).第三方遥控器的输入事件可能会传到UIKit,因为与Siri Remote不同,它不是GCMicroGamepad.

到目前为止,Apple确实不支持使用多个Siri遥控器,iOS遥控器或IR遥控器的多人游戏.但我认为可能会因为the Remote app on iOS will soon support multiplayer gaming而来(所以我猜Apple TV会识别多个GCMicroGamePad控制器).

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...