iOS GameController连接游戏手柄

来源:互联网 发布:mac用什么吉他声卡 编辑:程序博客网 时间:2024/06/10 05:02

环境:iOS 10.3.3

Xcode:  8.3.3

蓝牙手柄:莱仕达MFi认证手柄 链接 (非广告,只是随便搜的)

引用库:  

#import <GameController/GameController.h>

在info.plist中添加:

Privacy - Bluetooth Peripheral Usage Description

一、执行配置/连接方法

- (void)viewDidLoad {    [super viewDidLoad];    self.view.backgroundColor = [UIColor whiteColor];    [self configureGameControllers];}


二、配置方法

//配置 GameController- (void)configureGameControllers {    NSLog(@"configure GameController");    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(gameControllerDidConnect:) name:GCControllerDidConnectNotification object:nil];    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(gameControllerDidDisconnect:) name:GCControllerDidDisconnectNotification object:nil];        [GCController startWirelessControllerDiscoveryWithCompletionHandler:^{        // we don't use any code here since when new controllers are found we will get notifications    }];}

三、判断连接状态,成功则连接 GameController

//判断连接状态- (void)gameControllerDidConnect:(NSNotification *)notification {    [self configureConnectedGameControllers];    NSLog(@"connect GameController Device success");}- (void)gameControllerDidDisconnect:(NSNotification *)notification {    NSLog(@"fail to connect GameController Device");}//连接 GameControllers- (void)configureConnectedGameControllers {    for (GCController *controller in [GCController controllers]) {        [self setupController:controller];    }}

四、配置按键

//配置按键- (void)setupController:(GCController *)controller{    NSLog(@"setupController");        /** 对X,Y,A,B键位进行注册     **/    GCControllerButtonValueChangedHandler Y_ButtonHandler = ^(GCControllerButtonInput *button, float value, BOOL pressed) {        NSLog(@"Y_button (value : %f), (pressed : %d)", value, pressed);    };        GCControllerButtonValueChangedHandler X_ButtonHandler = ^(GCControllerButtonInput *button, float value, BOOL pressed) {        NSLog(@"X_button (value : %f), (pressed : %d)", value, pressed);    };        GCControllerButtonValueChangedHandler A_ButtonHandler = ^(GCControllerButtonInput *button, float value, BOOL pressed) {        NSLog(@"A_button (value : %f), (pressed : %d)", value, pressed);    };        GCControllerButtonValueChangedHandler B_ButtonHandler = ^(GCControllerButtonInput *button, float value, BOOL pressed) {        NSLog(@"B_button (value : %f), (pressed : %d)", value, pressed);    };        if (controller.gamepad) {        controller.gamepad.buttonA.valueChangedHandler = A_ButtonHandler;        controller.gamepad.buttonB.valueChangedHandler = B_ButtonHandler;        controller.gamepad.buttonX.valueChangedHandler = X_ButtonHandler;        controller.gamepad.buttonY.valueChangedHandler = Y_ButtonHandler;    }    if (controller.extendedGamepad) {        controller.extendedGamepad.buttonA.valueChangedHandler = A_ButtonHandler;        controller.extendedGamepad.buttonB.valueChangedHandler = B_ButtonHandler;        controller.extendedGamepad.buttonX.valueChangedHandler = X_ButtonHandler;        controller.extendedGamepad.buttonY.valueChangedHandler = Y_ButtonHandler;    }        /** 对肩部的键位进行注册     **/    GCControllerButtonValueChangedHandler L_ShoulderHandler = ^(GCControllerButtonInput *button, float value, BOOL pressed) {        NSLog(@"L_shoulder (value : %f), (pressed : %d)", value, pressed);    };        GCControllerButtonValueChangedHandler R_ShoulderHandler = ^(GCControllerButtonInput *button, float value, BOOL pressed) {        NSLog(@"R_shoulder (value : %f), (pressed : %d)", value, pressed);    };        if (controller.gamepad) {        controller.gamepad.leftShoulder.valueChangedHandler = L_ShoulderHandler;        controller.gamepad.rightShoulder.valueChangedHandler = R_ShoulderHandler;    }    if (controller.extendedGamepad) {        controller.extendedGamepad.leftShoulder.valueChangedHandler = L_ShoulderHandler;        controller.extendedGamepad.rightShoulder.valueChangedHandler = R_ShoulderHandler;    }        /** 对扳机进行注册     **/    GCControllerButtonValueChangedHandler L_LeftTrigger = ^(GCControllerButtonInput *button, float value, BOOL pressed) {        NSLog(@"L_TriggerHandler (value : %f), (pressed : %d)", value, pressed);    };        GCControllerButtonValueChangedHandler R_LeftTrigger = ^(GCControllerButtonInput *button, float value, BOOL pressed) {        NSLog(@"R_TriggerHandler (value : %f), (pressed : %d)", value, pressed);    };        if (controller.extendedGamepad) {        controller.extendedGamepad.leftTrigger.valueChangedHandler = L_LeftTrigger;        controller.extendedGamepad.rightTrigger.valueChangedHandler = R_LeftTrigger;    }        /** 对左右滑杆、方向按键进行注册     **/    //滑杆    GCControllerDirectionPadValueChangedHandler L_ThumbHandler = ^(GCControllerDirectionPad *dpad, float xValue, float yValue) {        NSLog(@"L_thumbHandler (x : %f), (y : %f)", xValue, yValue);    };        GCControllerDirectionPadValueChangedHandler R_ThumbHandler = ^(GCControllerDirectionPad *dpad, float xValue, float yValue) {        NSLog(@"R_thumbHandler (x : %f), (y : %f)", xValue, yValue);    };    //方向按键    GCControllerDirectionPadValueChangedHandler dpadChangedHandler = ^(GCControllerDirectionPad *dpad, float xValue, float yValue){        NSLog(@"dpad (x : %f), (y : %f)", xValue, yValue);    };        if (controller.extendedGamepad) {        controller.extendedGamepad.leftThumbstick.valueChangedHandler = L_ThumbHandler;        controller.extendedGamepad.rightThumbstick.valueChangedHandler = R_ThumbHandler;    }    if (controller.gamepad.dpad) {        controller.gamepad.dpad.valueChangedHandler = dpadChangedHandler;    }}

五、苹果官方介绍 Game Controller Programming Guide









原创粉丝点击