iOS GameController连接游戏手柄

环境: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









  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
360模拟[Options] UseInitBeep=0 DebugMode=0 Log=0 Console=0 InternetDatabaseUrl=http://www.x360ce.com/webservices/x360ce.asmx InternetFeatures=1 InternetAutoload=1 [InputHook] HookMode=1 [IG_df700cc0a1f811e28001444553540000] ProductName=Twin USB Joystick ProductGuid=00010810-0000-0000-0000-504944564944 InstanceGuid=df700cc0-a1f8-11e2-8001-444553540000 ControllerType=5 PassThrough=0 Right Trigger=6 RightTriggerDeadZone=0 Left Trigger=5 TriggerDeadzone=0 D-pad POV=1 D-pad Up=UP D-pad Down=DOWN D-pad Left=LEFT D-pad Right=RIGHT AxisToDPad=0 AxisToDPadDeadZone=256 AxisToDPadOffset=0 Back=9 Start=10 A=3 B=2 X=4 Y=1 Left Shoulder=7 Right Shoulder=8 Left Analog X=1 Left Analog Y=-2 Left Analog X+ Button=0 Left Analog X- Button=0 Left Analog Y+ Button=0 Left Analog Y- Button=0 Left Thumb=11 Left Analog X DeadZone=0 Left Analog Y DeadZone=0 Left Analog X AntiDeadZone=0 Left Analog Y AntiDeadZone=0 Right Analog X=6 Right Analog Y=-3 Right Analog X+ Button=0 Right Analog X- Button=0 Right Analog Y+ Button=0 Right Analog Y- Button=0 Right Thumb=12 Right Analog X DeadZone=0 Right Analog Y DeadZone=0 Right Analog X AntiDeadZone=0 Right Analog Y AntiDeadZone=0 UseForceFeedback=1 FFBType=0 SwapMotor=1 ForcePercent=0 LeftMotorPeriod=85 RightMotorPeriod=0 [IG_df7033d0a1f811e28002444553540000] ProductName=Twin USB Joystick ProductGuid=00010810-0000-0000-0000-504944564944 InstanceGuid=df7033d0-a1f8-11e2-8002-444553540000 ControllerType=5 PassThrough=0 Right Trigger=6 RightTriggerDeadZone=0 Left Trigger=5 TriggerDeadzone=0 D-pad POV=1 D-pad Up=UP D-pad Down=DOWN D-pad Left=LEFT D-pad Right=RIGHT AxisToDPad=0 AxisToDPadDeadZone=256 AxisToDPadOffset=0 Back=9 Start=10 A=3 B=2 X=4 Y=1 Left Shoulder=7 Right Shoulder=8 Left Analog X=1 Left Analog Y=-2 Left Analog X+ Button=0 Left Analog X- Button=0 Left Analog Y+ Button=0 Left Analog Y- Button=0 Left Thumb=11 Left Analog X DeadZone=0 Left Analog Y DeadZone=0 Left Analog X AntiDeadZone=0 Left Analog Y AntiDeadZone=0 Right Analog X=6 Right Analog Y=-3 Right Analog X+ Button=0 Right Analog X- Button=0 Right Analog Y+ Button=0 Right Analog Y- Button=0 Right Thumb=12 Right Analog X DeadZone=0 Right Analog Y DeadZone=0 Right Analog X AntiDeadZone=0 Right Analog Y AntiDeadZone=0 UseForceFeedback=1 FFBType=0 SwapMotor=1 ForcePercent=0 LeftMotorPeriod=85 RightMotorPeriod=0 [Mappings] PAD1=IG_df700cc0a1f811e28001444553540000 PAD2=IG_df7033d0a1f811e28002444553540000 PAD3= PAD4=

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值