Ris*_*shi 7 apple-tv gamecontroller swift
我在这里遵循了这个教程:https://cartoonsmart.com/how-to-support-external-game-controllers-with-swift-2-and-sprite-kit-for-the-new-apple-tv/ to在sprite工具包中将外部游戏控制器连接到apple tv,但我无法使用教程代码.我没有得到任何错误消息,但它根本无法正常工作.这是我的代码:
func setUpControllerObservers() {
NotificationCenter.default.addObserver(self, selector: #selector(connectControllers), name: NSNotification.Name.GCControllerDidConnect, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(disconnectController), name: NSNotification.Name.GCControllerDidDisconnect, object: nil)
}
func connectControllers() {
var count = 0
for controller in GCController.controllers() {
count = count + 1
print(count)
print(controller.extendedGamepad != nil)
print(controller.microGamepad != nil)
print(controller.gamepad != nil)
if (controller.extendedGamepad != nil && controller.playerIndex == .indexUnset) {
if (count == 1) {
controller.playerIndex = .index1
}
else if (count == 2) {
controller.playerIndex = .index2
}
else if (count == 3) {
controller.playerIndex = .index3
}
else if (count == 4) {
controller.playerIndex = .index4
}
controller.extendedGamepad?.valueChangedHandler = nil
setupExtendedController(controller: controller)
}
}
}
func disconnectController() {
}
func setupExtendedController(controller: GCController) {
controller.extendedGamepad?.valueChangedHandler = { (gamepad: GCExtendedGamepad, element: GCControllerElement) in
// not calling
}
}
Run Code Online (Sandbox Code Playgroud)
调试时,我发现GCController.controllers()数组是空的,即使它连接到apple tv.为了更加确定,我甚至在应用程序商店的应用程序上测试了控制器,该工具运行良好.有人可以帮忙吗?
编辑:这是我的didMove函数:
didMove(to view: SKView) {
setUpControllerObservers()
connectControllers()
}
Run Code Online (Sandbox Code Playgroud)
setUpControllerObservers您的函数何时、从哪个类被调用?我们需要更多背景信息来帮助您。
无论如何,请确保您connectControllers自己至少手动调用一次函数。您不能仅仅依靠传入的通知来为您调用该函数。他们在您链接的教程中提到了这一点:
\n\n\n另请注意,我们在 setUpControllerObservers 之后立即调用 connectControllers。应用程序第一次运行时,setUpControllerObservers 将导致我们的 NSNotification 也调用 connectControllers,但是如果我们要在 GameScene 和其他类之间来回切换,我们可以\xe2\x80\x99t 依赖 connectControllers再次从通知中呼叫。这就是我们自己称呼它的原因。
\n
您还应该确保在应用程序完成启动之前不要调用这些函数(例如,在 早期AppDelegate):
\n\n\n调用控制器类方法来检索所有连接的控制器的 GCController 对象数组。[...] 如果没有连接的控制器或者您在应用程序启动时调用此方法,则数组将为空。
\n
编辑:
\n\n出于调试目的,您可以尝试使用该函数“发现”控制器吗startWirelessControllerDiscovery(completionHandler:)?(游戏控制器编程指南:发现无线控制器中有描述)
| 归档时间: |
|
| 查看次数: |
677 次 |
| 最近记录: |