摘要: 做蓝牙小车,以前要摆四个按钮当方向键,按住还松不开。现在 App Inventor 有了「虚拟摇杆」组件:手指一拖,方向和力度都出来了。遥控小车、画布小游戏,几块积木就能搞定,安卓和鸿蒙都能用。
四个按钮,不如一个摇杆
做过蓝牙小车的都知道那套老办法:屏幕上摆「前、后、左、右」四个按钮,再加一个「停」。按钮按下去发指令,松手还得记着发停车,不然小车一路冲出去。想走斜线?没门。
「虚拟摇杆」把这事变简单了。它是一个圆形底盘加一个摇杆头,手指按住摇杆头往哪拖,小车就往哪走;松手,摇杆自己弹回中间,小车停下。
它在组件面板「界面高级」类里,拖进屏幕就能用,放在任意布局里都行。

▲ 虚拟摇杆:圆形底盘加一个摇杆头(示意图)
两种用法,看你要什么
摇杆给出两类信息,对应两种用途:
• 方向:上、下、左、右,松手是「中间」。方向数设成 8 的话还有左上、右下这些斜向。适合遥控小车、机械臂——方向变了才发一次指令。
• 坐标:X、Y 都在 -1 到 1 之间,右和上为正,推得越远数值越大。适合游戏——推一点慢慢走,推到底跑起来。
案例一:蓝牙遥控小车
先用蓝牙客户端连上小车(比如 HC-05 模块),把摇杆的「方向数」设为 4。小车程序约定:F 前进、B 后退、L 左转、R 右转、S 停车。

▲ 蓝牙小车:方向改变时按方向发指令
关键在「方向改变时」这个事件:只在方向变化时触发一次。手指一直按着往前推,它只发一个 F,不会每秒发几十条把蓝牙堵死。松手摇杆回中,触发一次「中间」,走到最后那个「否则」,发 S,小车停住。

▲ 方向变了才发一次指令,松手即停(示意图)
案例二:画布小游戏,摇杆控制角色
画布里放一个图像精灵,再放一个计时器,间隔设 30 毫秒。每次计时到,按摇杆当前位置挪一下精灵:

▲ 画布游戏:按摇杆坐标移动精灵
注意纵向是减法。画布的 y 轴朝下,摇杆的 Y 朝上为正,两边方向相反,减一下就对上了。乘的 8 是速度,推到边缘每次走 8 像素,想快就调大。

▲ 摇杆推得越远,角色走得越快(示意图)
案例三:松手归零,显示坐标
想先看看摇杆到底输出什么数,放一个标签显示坐标:

▲ 显示坐标,松手归零
「死区」是防手抖的:推动力度小于它,方向一律算「中间」,手指在中心附近轻微晃动不会乱发指令。默认 0.2,这里调成 0.1 更灵敏一点。
常用属性一览
属性
作用
方向数
:4(上下左右)或 8(加斜向),默认 8
死区
:0 到 0.9,力度小于它算「中间」,默认 0.2
松手回中
:默认真;设为假时停在松手位置,适合当油门用
角度 / 距离
:0 度为正右、90 度为正上;距离 0 到 1 表示推了多远
尺寸
:底盘直径,默认 140 像素
底盘颜色 / 摇杆颜色
:换成你 App 的配色
几个小提醒
• 摇杆想浮在游戏画面上(手游那种左下角摇杆),配合「悬浮窗」组件,把它的「可拖动」关掉,否则拖摇杆会把整个悬浮窗拖走。
• 控制真实设备时,「被松开时」事件里最好也补发一次停止指令,多一道保险。
• 同一屏幕用多个案例时,同名事件要合并到一个事件积木里。
完整的属性说明、可直接导入的 .aia 源码,在文档站搜「虚拟摇杆使用指导」就能找到。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。