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
阅读全文
1 0
- iOS GameController连接游戏手柄
- 游戏手柄 GameController
- iOS 7+ 手柄的使用方法,GameController.FrameWork
- iOS游戏控制手柄
- 苹果推iOS游戏手柄,掌上游戏主机格局变天?
- 60beat GamePad推iOS设备的配套游戏手柄
- 全兼容ios游戏手柄推出 续航长达40小时
- android游戏手柄问题
- 游戏手柄设置
- 游戏手柄模板
- 自定义游戏手柄方向键
- ios手柄研究
- 关于游戏手柄连接智能硬件充当遥控器的一些问题
- 买了个游戏手柄
- JoyStick(游戏手柄)与C#
- VC读取游戏手柄按键
- 游戏手柄;鼠标;键盘功能
- [Android] Joystick游戏手柄开发
- JAVA错误:The public type *** must be defined in its own file***
- c++ 虚继承与继承的差异
- 多重循环&数组
- jQuery 效果
- 【程序员的碎碎念】越碎片越焦虑
- iOS GameController连接游戏手柄
- Node.js/Express学习笔记_01 安装与配置Node.js
- Jsp文件修改后不生效怎么办?
- C++知识点之类型转换函数
- 关于EXPORT_SYMBOL的作用浅析
- 字符串的最大平方串
- Node.js/Express学习笔记_02 快速开始express
- 【内含福利】黑科技神助攻,白娘子玩转云栖大会
- Convex hull凸包问题和Graham算法