游戏控制器介绍及代码集成

本文介绍了iOS7中新增的GameController Framework,它使开发者能够轻松地检测和配置游戏控制器硬件。文章详细阐述了如何通过注册事件来响应控制器的连接与断开,并为不同类型的按钮设置回调函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在iOS7中,苹果加强了对游戏开发的支持,其中一个功能就是增加了Game Controller Framework (GameController.framework)可以让你在程序中发现游戏控制器硬件并进行配置。通过Game Controller Framework可以通过无线或者蓝牙连接iOS设备。当控制器可用的时候,该Framework会通知应用程序。
Game Controller Framework 支持三种类型的控制器
• 标准的控制器:该控制器具有一个方向键,一个暂停按钮,四个按钮和两个肩部按钮。
• 扩展的控制器:该控制器跟标准控制器类似,但它可以有两个杆和四个肩部按钮。
• 扩展无线控制器:跟上面的控制器类似,但它以无线方式工作,不需要将IOS设备放置到控制器里面。

[img]http://dl2.iteye.com/upload/attachment/0097/4664/f9537287-cacf-36f2-a48a-687a2182cd2e.png[/img]


软件环境:ios7 + xcode5
操作系统:OSX 10.8.4
实现过程:
1:将游戏控制器的Connet和Disconnet状态进行事件注册
- (void)configureGameControllers {

[[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
}];
}


实现相应注册事件的代码
- (void)gameControllerDidConnect:(NSNotification *)notification {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Warning"
message:@"Game controller connected. Do you want to use it?"
delegate:self
cancelButtonTitle:@"No"
otherButtonTitles:@"Yes", nil];
[alert show];
}
- (void)gameControllerDidDisconnect:(NSNotification *)notification {

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Warning"
message:@"Game controller has disconnected."
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil, nil];
[alert show];
}



2:遍历所有的控制器,并对其按键进行注册
- (void)configureConnectedGameControllers {
for (GCController *controller in [GCController controllers]) {
[self setupController:controller ];
}
}

- (void)setupController:(GCController *)controller
{
/** 对X,Y,A,B键位进行注册
**/
GCControllerButtonValueChangedHandler XYABButtonHandler = ^(GCControllerButtonInput *button, float value, BOOL pressed) {
};
if (controller.gamepad) {
controller.gamepad.buttonA.valueChangedHandler = XYABButtonHandler;
controller.gamepad.buttonB.valueChangedHandler = XYABButtonHandler;
controller.gamepad.buttonX.valueChangedHandler = XYABButtonHandler;
controller.gamepad.buttonY.valueChangedHandler = XYABButtonHandler;
}
if (controller.extendedGamepad) {
controller.extendedGamepad.buttonA.valueChangedHandler = XYABButtonHandler;
controller.extendedGamepad.buttonB.valueChangedHandler = XYABButtonHandler;
controller.extendedGamepad.buttonX.valueChangedHandler = XYABButtonHandler;
controller.extendedGamepad.buttonY.valueChangedHandler = XYABButtonHandler;
}
/** 对肩部的键位进行注册
**/
GCControllerButtonValueChangedHandler LRShoulderHandler = ^(GCControllerButtonInput *button, float value, BOOL pressed) {
};
if (controller.gamepad) {
controller.gamepad.leftShoulder.valueChangedHandler = LRShoulderHandler;
controller.gamepad.rightShoulder.valueChangedHandler = LRShoulderHandler;
}
if (controller.extendedGamepad) {
controller.extendedGamepad.leftShoulder.valueChangedHandler = LRShoulderHandler;
controller.extendedGamepad.rightShoulder.valueChangedHandler = LRShoulderHandler;
}
/**对方向键进行注册
**/
GCControllerDirectionPadValueChangedHandler LRThumbHandler = ^(GCControllerDirectionPad *dpad, float xValue, float yValue) {
};
if (controller.extendedGamepad) {
controller.extendedGamepad.leftThumbstick.valueChangedHandler = LRThumbHandler;
controller.extendedGamepad.rightThumbstick.valueChangedHandler = LRThumbHandler;
}
if (controller.gamepad.dpad) {
controller.gamepad.dpad.valueChangedHandler = dpadMoveHandler;
}

}



参考:《iOS 7 Game Development》
儿童游戏计时器使用说明 该小工具可以对孩子玩游戏的时间进行控制,让孩子自己学会使用自己的积分。 这个程序是我为了管理在静安一师附小上小学女儿经常玩在线小游戏,自己随意写的。原理是控制系统的hosts文件(目前只支持系统安装C盘),使在线游戏的网页无法打开,从而控制孩子随意玩游戏。 当孩子开始计时玩游戏的时候,系统将本程序文件夹下面的没有限制的hosts_yes文件替换掉系统hosts文件,系统开始玩游戏计时,然后就可以打开网页访问游戏网站并玩游戏了。 当计时结束,系统将本程序文件夹下面的限制游戏域名的hosts_no文件替换掉系统hosts文件,并自动关机。由于hosts文件限制了游戏域名,无法打开游戏网页,当然也无法玩游戏了。 家长可提前给孩子一定的积分,每个积分可以玩10分钟的游戏,家长也可以日常根据孩子的表现,给孩子加积分。我是当孩子平时考试得100就给2积分,自己主动学习英语给1积分等等。 家长使用: 第一次运行并退出一次,就限制了一些常用的在线小游戏域名了。 家长设置功能是需要密码(默认111)的,包括表现增加积分、设置禁用域名、系统设置,系统设置包括修改家长管理密码和设置孩子每次最多能使用几个积分 孩子使用: 孩子可打开计时器,并选择使用几个积分来玩游戏(1积分可玩10分钟),然后点击开始玩游戏,系统开始计时,这时候就可以打开相关的游戏网页并玩游戏了。 程序用delphi7写的,如有问题或者需要源码自己修改,请联系zhaogz@sina.com 石头 由于涉及到修改hosts文件,主程序有时可能被360安全卫士隔离,可设置360对该程序为信任。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值