跳转到内容

获取遥控器状态示例


本示例演示如何读取遥控器按键与摇杆输入状态。

example/example_retroid.cpp 展示了如何接收并实时显示 Retroid 手柄的所有按键和摇杆状态。

RetroidGamepad rc(12121); ///< 创建手柄实例,监听 12121 端口
InitialRetroidKeys(rc); ///< 初始化按键状态显示字符串
rc.StartDataThread(); ///< 启动 UDP 数据接收线程
rc.updateCallback_ = [&](int32_t count) {
std::cout << rc << std::endl; ///< 每次数据更新时清屏并打印手柄状态
};

程序运行后,终端会以表格形式实时显示手柄状态:

Retroid 终端输出

按下按键时,对应项会变为绿色的 pressed。

example/example_skydroid.cpp 的使用方式与 Retroid 类似:

SkydroidGamepad rc(12121);
InitialSkydroidKeys(rc);
rc.StartDataThread();
rc.updateCallback_ = [&](int32_t count) {
std::cout << rc << std::endl;
};

终端输出会显示 Skydroid 的按键、拨动开关和摇杆数据:

Skydroid 终端输出

通过 ControllerSDK 获取手柄数据:

controller.addJoystickListener { data ->
val leftX = data.leftX
val leftY = data.leftY
val rightX = data.rightX
val rightY = data.rightY
Log.d("Controller", "左摇杆: ($leftX, $leftY)")
Log.d("Controller", "右摇杆: ($rightX, $rightY)")
}

通过 SDK 获取键盘/手柄输入:

UserCommand cmd;
if (getUserInput(&cmd)) {
printf("vx: %.2f, vy: %.2f, vyaw: %.2f\n",
cmd.vx, cmd.vy, cmd.vyaw);
}