我正在使用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控制器).