Controller GC2控制器Swift 2如何检测按钮按下

Controller GC2控制器Swift 2如何检测按钮按下,controller,user-controls,sprite-kit,swift2,Controller,User Controls,Sprite Kit,Swift2,我想让我正在开发的2D平台游戏对MFi控制器上按下的按钮做出响应。有一个问题我已经挂了好几个小时了。我基本上是按照《苹果游戏控制器框架开发者指南》的指示来做的,尽管指南中的代码是Objective-C,而不是Swift(来吧,苹果)。我不明白我做错了什么,我觉得答案很简单,但我不明白。我唯一的解释是Xcode 7测试版中的一个bug。无论如何,这是我的代码: if GCController.controllers().count >= 1 { if GCController().gamep

我想让我正在开发的2D平台游戏对MFi控制器上按下的按钮做出响应。有一个问题我已经挂了好几个小时了。我基本上是按照《苹果游戏控制器框架开发者指南》的指示来做的,尽管指南中的代码是Objective-C,而不是Swift(来吧,苹果)。我不明白我做错了什么,我觉得答案很简单,但我不明白。我唯一的解释是Xcode 7测试版中的一个bug。无论如何,这是我的代码:

if GCController.controllers().count >= 1 {
if GCController().gamepad!.buttonA.pressed {
jump()
}

}

当我在iPhone上运行应用程序时,它运行得很好,但当我从Mac上拔下iPhone并尝试将其与我的Logitech PowerShell一起使用时,它会在呈现的场景中崩溃


顺便说一下,我并不是这样格式化代码的。再过几周我就没有Wi-Fi糖果了,而且我的运营商不支持iPhone作为个人热点,所以我不得不用我的iPhone发布这篇文章,因此它看起来很奇怪。

个人资料
gamepad
是单个控制器的属性,而不是控制器阵列。您需要执行以下操作:

if let controller = GCController.controllers().first {
    if controller.gamepad!.buttonA.pressed {
        jump()
    }
}
或者,您可以设置
按ChangedHandler
并从那里调用您的
jump()
。您需要在
controllerDidConnect
通知中执行此操作,以便有一个对控制器的引用:

@objc class func controllerDidConnect(notification: NSNotification) {

    let controller = notification.object as! GCController

    controller.gamepad?.buttonA.pressedChangedHandler = { (element: GCControllerElement, value: Float, pressed: Bool) in

        if pressed {
            jump()
       }    
    }
}