GCController Swift 2如何检测按钮按下

时间:2015-09-01 00:32:39

标签: controller user-controls sprite-kit swift2

我希望制作我正在开发的2D平台游戏,以响应在MFi控制器上按下的按钮。几个小时我一直挂在一个问题上。我基本上正在做GameController框架的Apple开发人员指南指示我做的事情,虽然指南中的代码是在Objective-C中,而不是Swift(来吧,Apple)。我无法理解我做错了什么,我觉得答案会很简单,但我无法理解。我唯一的解释是Xcode 7 Beta中的一个错误。无论如何,这是我的代码:

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

}

}

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

顺便说一句,这并不是我格式化代码的方式。我将没有几个星期的Wi-Fi甜点,我的运营商不支持iPhone充当个人热点,所以我必须使用我的iPhone发布这个,因此它看起来很奇怪。

1 个答案:

答案 0 :(得分:0)

配置文件gamepad是单个控制器的属性,而不是控制器阵列。您需要执行以下操作:

if let controller = GCController.controllers().first {
    if controller.gamepad!.buttonA.pressed {
        jump()
    }
}

或者,您可以设置pressedChangedHandler并从那里拨打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()
       }    
    }
}