当玩家在移动设备上玩端游时,需要通过键盘映射或手柄映射操作云端游戏。为提高玩家的云游戏操控体验,云游戏提供动态可配置的虚拟按键布局的能力,同时也减少您在接入过程中的开发成本和后期维护成本。
注意
目前云游戏虚拟按键仅支持 Android 端。
支持说明
类型 | 说明 |
库文件 | tcgui-gamepad.aar 虚拟按键拓展库。 |
按键类型 | 键盘按键(78个单击按键)。 鼠标按键(左、中、右、上滚、下滚)。 十字摇杆键(WDSA、上右下左)。 Xbox 手柄 A、B、X、Y、Select、Start、LB、RB、L3、R3 普通点击键。 Xbox 手柄延时板机键:LT、RT。(点击时在短时间内连续发多次消息,按下时消息的力度随时间递增,松开后随时间递减。) Xbox 手柄左、右摇杆键。 Xbox手柄十字方向键。 |
编辑功能 | 动态添加/删除按键。 动态调整按键位置、大小。 增加辅助线方便定位按键。 点击类按键支持修改名称,最多显示6个字符。(UI 切图等资源暂不支持动态设置。) |
使用说明
关键类介绍
GamepadManager
虚拟按键管理类(继承 RelativeLayout)。
注册 OnEditListener 监听虚拟按键编辑事件的回调。
注册 IInstructionListener 监听触发按钮事件的回调。
关键流程说明
1. 初始化。
mCustomGamePad = new GamepadManager(this);mCustomGamePad.setEditListener();mCustomGamePad.setInstructionListener();// 按键视图应放在游戏视频视图之上,否则可能导致按键无法正常使用addView(mCustomGamePad);
2. 读取配置文件。
String mCustomGamePadCfg;mCustomGamePadCfg = readConfigFile("default_gamepad.cfg");
注意
此处代码仅演示过程,具体文件的读写由业务侧来实现。
3. 显示虚拟按键或编辑虚拟按键。
// 显示虚拟按键mCustomGamePad.showGamepad(mCustomGamePadCfg);// 进入编辑模式mCustomGamePad.editGamepad(mCustomGamePadCfg);
4. 启用手柄类按键布局。
关键类 | 说明 |
gamepad.needConnected | 使用布局前判断是否为手柄按键 |
SDK.sendGamePadConnected | 使用虚拟手柄前需调用接口通知云端启用手柄 |
SDK.sendGamePadDisconnected | 结束虚拟手柄后主动卸载云端手柄 |
if (enable) {mCustomGamePad.setVisibility(View.VISIBLE);mCustomGamePad.showGamepad(mCustomGamePadCfg);// 判断是否为手柄按键if (mCustomGamePad.needConnected()) {mSDK.sendGamePadConnected();}} else {mCustomGamePad.setVisibility(View.GONE);if (mCustomGamePad.needConnected()) {mSDK.sendGamePadDisconnected();}}
5. 监听编辑事件的回调。
mCustomGamePad.setEditListener((isChanged, jsonCfg) -> {if (isChanged) {// 保存编辑后的配置文件mCustomGamePadCfg = jsonCfg;}}
6. 监听按键点击触发的事件。
mCustomGamePad.setInstructionListener(instruction -> {if (mSDK != null) {// 通过云游戏SDK发送操作指令mSDK.sendKmEvents(instruction);}});
7. 适配与虚拟鼠标共存。
// 设置点击事件的代理,将事件传递给鼠标视图public void setGamePadTouchDelegate(IGamepadTouchDelegate delegate) {mCustomGamePad.setGamePadTouchDelegate(delegate);}mControlView.setGamePadTouchDelegate((v, event) -> {mGameView.handleMotion(event);return true;});
配置文件
虚拟按键的配置信息以 JSON 格式保存为配置文件,由业务侧负责管理文件的保存与读取,以此来为不同的用户提供个性化虚拟按键配置。
忽略混淆
打包时请设置混淆规则:
对 Java 代码不做混淆。
-keep class com.tencent.tcggamepad.**{*;}
对资源文件不做混淆。
tools:keep="@drawable/tcg_*"