# GamePad
**Repository Path**: baihonghua/GamePad
## Basic Information
- **Project Name**: GamePad
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-11-01
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## iConsoles手柄中间件SDK接入指引
[toc]
当前版本号
iConsoles1.3
-----
#### SDK能做什么
SDK提供在android和yunOS操作系统上对游戏手柄,键盘的适配,功能如下
1. App情景:使用手柄的A,B键模拟确认,返回的操作,手机版App轻松完美移植到TV.
2. 游戏情景: 提供**上下左右方向键,左右摇杆,A,B,X,Y,start, select, L1, R1,L2,R2,THUMBL,THUMBR**等12键的标准输出,无论何种手柄,何种模式均按此标准输出键值.游戏开发只需专注与如何使用手柄提高游戏的操作体验.
3. 兼容市面上诸多手柄,并对新上市手柄提供在线的,持续的,及时的兼容性更新.
4. 低侵入式集成:无需驱动,无需ROOT.
5. 兼容标准外置键盘.app/游戏的用户没有手柄就换键盘吧.反正游戏不能错过.
###什么是标准按键
说明
目前市面上的游戏手柄通常包含多种模式 pc/xbox/ps/android.手柄品牌和模式切换会导致键值输出不一致.同一个手柄在不同的设备和操作系统上输出不一致.
SDK不管手柄切换到什么模式,在什么设备上.保证标准12键的键值输出的一致性.其他非标准键,保持原始输出.
注意:有些设备系统本身无法识别某些手柄的特定模式,sdk也不能兼容(有些设备同时兼容XBOX和PS模式的手柄,有些设备只兼容PS).
如下所示,任何手柄都是以下图标准键值.开发者只需关心业务及与如下标准按键交互逻辑即可.

|序号|keycode|说明|
|--------|-----|----|
| 1 | DPAD_UP, DPAD_DOWN, DPAD_LEFT, DPAD_RIGHT | 上下左右方向键|
| 2 | lx,ly,BUTTON_THUMBL| 左摇杆坐标, 范围[-1.0,1.0],左Thumb |
| 3 | rx,ry,BUTTON_THUMBR| 右摇杆坐标, 范围[-1.0,1.0],右Thumb |
| 4 | BUTTON_X | X键 |
| 5 | BUTTON_A | A键,在菜单导航中用于确定(EVENT_MODE_SYSTEM) |
| 6 | BUTTON_Y | Y键 |
| 7 | BUTTON_B | B键,在菜单导航中用于返回或者取消(EVENT_MODE_SYSTEM) |
| 8 | BUTTON_R1 | R1键 |
| 9 | BUTTON_THUMBR |右扳机,油门 |
| 10 | BUTTON_THUMBL| 左扳机,刹车 |
| 11 | BUTTON_L1| L1键 |
| 12 | BUTTON_SELECT| 投币,菜单(EVENT_MODE_SYSTEM)|
| 13 | BUTTON_START| 游戏开始/暂停 |
(EVENT_MODE_SYSTEM)表示在应用模式下
----
键盘按键说明(仅在EVENT_MODE_GAME生效).
|键盘键值|keycode|
|--------|-----|
|a|DPAD_UP |
|s|DPAD_DOWN|
|d|DPAD_LEFT|
|f|DPAD_RIGHT |
|j|BUTTON_X|
|k|BUTTON_A|
|u|BUTTON_Y|
|i|BUTTON_B|
|q|BUTTON_L1|
|e|BUTTON_R1|
|n|BUTTON_L2|
|m|BUTTON_R2|
|f|BUTTON_THUMBR |
|h|BUTTON_THUMBL|
---
###兼容范围之外的手柄如何适配
提供了DemoGamePadRes的android library和libgamepadwithui.jar.
集成UI库后APP就有了通过APP用户手动映射的能力.
适配界面截图如下:


-----
### 示例DEMO和依赖jar包
如何开发一个支持手柄操作的 <2048>游戏
项目地址 https://github.com/KoVszone/GamePad
``` git
git clone https://github.com/KoVszone/GamePad
```
### SDK接入步骤:
#### 1:**权限和KEY:**
在AndroidManifest.xml 添加如下代码段:
``` xml
.
.
.
.
```
其中 **%s** 为应用标示,该值由第三方开发者工程的包名和签名MD5指纹计算,具体获取和计算方法请发送电子邮件[service@kobox.tv ](service@kobox.tv ),邮件标题需要以[sdk]开头.
DEMO中因为签名关系会出现手柄未适配从而使用不正常的现象,申请接入KEY并配置即可解决.
####2: **依赖**
在android工程的构建路径中加入SDK的依赖jar包
**libgamepad.jar**//SDK
**libGameHelper.so** //SDK
**gson-2.3.jar**//JSON
**protobuf2.5.0.jar**//google通信协议
以eclipse工程为例 在../libs下

####3:**初始化**
在AndroidManifest.xml中android:name标签指定的类中初始化SDK
意图是在应用启动时就初始化SDK。
代码示例如下:
``` xml
---------
AndroidManifest.xml
---------
```
配置虚拟手柄拓展支持.(初始化SDK时 配置开启虚拟手柄支持)
```java
ConfigBuilder configBuilder = new ConfigBuilder();
configBuilder.configVirtualGamePadExtand();
GamePadManager.getInstance(this).conifg(configBuilder);
```
窗口切换 仅仅让当前的窗口支持虚拟手柄
```java
@Override
protected void onResume() {
super.onResume();
GamePadManager.getInstance(this).switchContext(this);
}
```
### 关于混淆
在proguard配置文件中添加如下
-libraryjars libgamepad.jar
更多配置见DemoProgject/proguard-project.txt
### Java Doc
JAVA开发文档见 /doc
兼容性
android 4.0-5.1
yun OS 外设SDK2.7及以上
虚拟手柄下载地址

####Change Log
iConsoles1.3
1:增加对标准外置键盘的支持.
2:提高手柄在不同设备上适配的精度.
iConsoles1.2
1. 提高对手柄sdk 对手柄多模式的支持(XBOX/ps/pc模式).
2. 扩大手柄按键兼容标准的范围,由8键增加到12键(A,B,X,Y,SELECT,START,L1,R1,L2,R2,THUMBL(左摇杆按键),THUMBR(右摇杆按键)).
3. 更新键值采集的机制.允许用户自主上传键值映射,提升键值的兼容广度.
4. 增加一个API OnPlayerListenerWrapper,直接输出左右摇杆的XY值
iConsoles1.1
1. 增加 针对未适配的手柄 提供映射界面.
2. 增加 当前支持的手柄列表展示界面
3. 增加 当前已经插入到设备上的列表界面
4. 上述界面UI资源均以Android Libarry+jar的形式提供,与libgamepad.jar独立,故可单独使用.
5. 提升兼容性(android4.0-5.1)
--------
###常见问题QA
1. Q1:异常 java.lang.VerifyError. **cn.vszone.gamepad
解决方法 :按照步骤3 导入gson-2.3.jar,protobuf2.5.0.jar依赖文件
2. Q2:手柄使用异常,且有如下log
VSzone "WARN:the xxx is invalid"
解决方法:见SDK接入步骤1,使用正确的接入KEY
2. Q2:手柄使用异常,且有如下log
key is too short
解决方法:见SDK接入步骤1,使用正确的接入KEY
2. Q2:手柄使用异常,且有如下log
lock==null
解决方法:见本文 关于混淆
3. Q3:多个手柄存在的情况下怎么分辨
手柄按插入的先后顺序为每个手柄设置了一个递增的序号.
假设当前存在序号为1(A手柄),2(B手柄)3(C手柄)三个手柄
1:拔掉A,不拔掉BC,再插入A, ABC序号不变
2:拔掉AB,不拔掉C,再插入B, 再插入A, ABC序号为(2,1,3)
3:拔掉ABC,再插入B, 再插入C,再插入A, ABC序号为(3,1,2)
该序号就是程序中的playerID
-----
>http://www.matchvs.com
> Copyright © 2012 - 2015 matchvs. All Rights Reserved.