iOS 7+ 手柄的使用方法,GameController.FrameWork

笔者昨天买回了G550 ,也就是 Logitech 的iOS 的手柄,支持iPhong 5 / iPhone 5s / iTouch 5 等等

最近在捣鼓个东西,之前也说过要学习Cocos2dx,手柄到了以后先找了几个游戏 试试感觉还不错。

之后链接xCode看GameController.frameWork

现在个大网站查关于手柄控制的资料。。。基本无功而返。

看过官方文档以后。使用方法如下

手柄使用无非是连接手柄,识别手柄,读取手柄按键。

一.导入GameController.FrameWork,在需要使用的代码中包含 GameController/GameController.h

二.检测手柄连接

注意:手柄类也就是GameController 或者 GamePad这样的类是不需要自己Alloc,手柄对象的生存周期由系统控制

SDK中检测到手柄连接\断开会发送通知,通知名分别为

GCControllerDidConnectNotification : 连接

GCControllerDidDisconnectNotification : 断开

你可以在viewDidLoad里面这样写

GCControllerDidConnectNotification

GCControllerDidDisconnectNotification

这样当检测到手柄时候在gamPadConnection:这个方法里就能获取相关信息了。

三.识别手柄

– (void) gamPadConnection : (NSNotification*) info{if ([info.object isKindOfClass:[GCController class]]){gamePadController = info.object;gamePadController.playerIndex = 0;};}代码中的info.object就是手柄

GCController *gamePadController;

你可以在你觉得需要的地方保存这个手柄对象.至于gamePadController.palyerIndex = 0 这段代码,手柄是可以多人联机的。API中有关于无线手柄的概念,或许在同一个设备上连接多个手柄的功能。这个playerIndex 就是表示玩家的Index,简单的说,就是手柄编号,0 表示 是主手柄。

四.检测手柄按键

其实手柄按键的概念大概都是这样的.举例如果手柄上由10个按键那么肯定由一个 类似int Pad = 0; 而后一个int 假设是 16Bit。那么每一位表示一个按键。用该为的 0 或者 1 表示按键是否按下。

其实上面这句话和下面的内容没有什么关系- -|

如何读取。直接看代码,首先我们说怎么读取手柄上的 A,B,X,Y

gamePadController.gamepad.rightShoulder.pressed

gamePadController.gamepad.buttonA.pressed

等等……

比较简单。你也可以使用手柄内置的KVO模式做按键。每个按键都能设置 ValueChangedHandler 这是一个函数指针,如果你不知道什么是函数指针,你就理解为他是Block,

A,B,X,Y,LB,RB这些按键比较简单。

关键在于如果判定方向键.你仔细看看手柄上面的方向按键,,他是一个十字键,什么意思呢,比如你单纯的按下RIGHT,你认为只有RIGHT按下去了吗?NO 其实 RIGHT 按下 UP,DOWN 也多多少少的被按下去了.在打个比方UP按下 LEFT RIGHT 也将多多少少被按下了。

怎么解决这个问题呢…还好SDK给我们提供了比较方便的方法。

gamePadController.gamepad.dpad.xAxis.value(-1,1)的区间方便表示了 左右

(-1,1)的区间方便表示了 上下

再次贴上笔者的判键方法

#define GAMEPAD_SPL (150)int xValue = gamePadController.gamepad.dpad.xAxis.value * 1000;int yValue = gamePadController.gamepad.dpad.yAxis.value * 1000;controls.pad[0].buttons = 0;if (xValue > GAMEPAD_SPL){//right}else if (xValue < -GAMEPAD_SPL){//left}if (yValue > GAMEPAD_SPL){//up}else if (yValue < -GAMEPAD_SPL){//down}

笔者对见在每次游戏或者你的程序update 的时候去检测所有按键,来控制你的游戏状态..如果使用手柄的KVO,效率就无法保证了……..而且可能会导致各种各样的问题。。

以上。。

积极的人在每一次忧患中都看到一个机会,

iOS 7+ 手柄的使用方法,GameController.FrameWork

相关文章:

你感兴趣的文章:

标签云: