3

我一直在修补 Swift Playgrounds 来学习 Swift 和 SpriteKit。直到现在,事情进展顺利。我能够组装一个完全在 9.7 英寸 iPad Pro 上开发的简单但有趣的游戏。它所需要的只是游戏控制器支持。在设法移植网上找到的 Swift 2 教程后,游戏控制器在 xCode 8.1 中工作。但是我更喜欢开发平台,iPad 的表现也不尽如人意。

以下是适用于 macOS 的游戏控制器代码:

import SpriteKit
import PlaygroundSupport
import GameController

class GameScene: SKScene {

    override init(size: CGSize) {
        super.init(size: size)

        setUpControllerObservers()
        connectControllers()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    public override func didMove(to view: SKView) {
        setUpControllerObservers()
        connectControllers()
    }

    public func setUpControllerObservers() {
        NotificationCenter.default.addObserver(self, selector: #selector(GameScene.connectControllers), name: NSNotification.Name.GCControllerDidConnect, object: nil)

        NotificationCenter.default.addObserver(self, selector: #selector(GameScene.controllerDisconnected), name: NSNotification.Name.GCControllerDidDisconnect, object: nil)
    }

    public func connectControllers() {

        self.isPaused = false

        print(GCController.controllers().count)

        for controller in GCController.controllers() {
            if (controller.extendedGamepad != nil) {

                print("extendedGamepad")

                controller.extendedGamepad?.valueChangedHandler = nil
                setUpExtendedController(controller)
            }
        }
    }

    public func controllerDisconnected() {

        print("disconnect")

        self.isPaused = true
    }

    public func setUpExtendedController(_ controller:GCController) {

        print("setUpExtendedController")

        controller.extendedGamepad?.buttonA.pressedChangedHandler = {

            (input: GCControllerButtonInput!, value:Float, pressed:Bool) in

            print("!!!")

        }
    }
}


let frame = CGRect(x: 0, y: 0, width: 400, height: 600)
let view = SKView(frame: frame) //GameView(frame: frame)
let scene = GameScene(size: frame.size)
view.presentScene(scene)
PlaygroundPage.current.liveView = view

在 iPad 上,我发现有必要在 Swift Playgrounds 和另一个应用程序(或 Home)之间短暂切换并返回以识别控制器。但在那之后,设置一直进行到为 A 按钮分配处理程序。随心所欲地按 A 按钮,iPad 不会收到消息。如前所述,macOS 似乎工作得很好。

谁能指出导致 iPad 脾气暴躁的原因?谢谢您的帮助!

4

0 回答 0