Swipe(滑动)
在屏幕上滑动或拖动——用于滚动、快滑或移动某物。
用途
执行一个方向手势。用来滚动列表、翻页、拖动一个物件。手势可以覆盖整屏,或限定在一个区域里只滚动某个面板。
它还有第二种、很不一样的模式:Bring a target to the centre(把目标带到中央)。你不说多远、哪个方向,而是指定一个 Find Image 节点,运行时滑动恰好足够远,把匹配结果带到屏幕中央——在任何屏幕尺寸上,流程里不存任何像素值。
何时用
- 滚动列表、信息流或背包面板。
- 在页面间翻动。
- 把一个物件从一处拖到另一处。
- 在缩放或读取之前把刚找到的东西居中。
何时不用
前提
方向/距离模式需要方向和距离。中央模式需要一个更早在同一路径上运行过并匹配的 Find Image 节点。
如何运行
设备尺寸不从流程读取——运行时测量活实例。这就是中央模式分辨率无关的原因。
设置
| 设置 | 类型 | 范围 | 默认 | 作用 |
|---|---|---|---|---|
| Swipe mode | 选择 | directionDistance、alignTarget | directionDistance | 自己配置手势,或指定目标来居中 |
| Target (from Find Image) | 节点引用 | — | — | 中央模式:谁的匹配要居中 |
| Swipe area | 选择 | screen、region | screen | 整屏,或限定在矩形内 |
| Direction | 选择 | 4 主 + 4 斜 | — | up、down、left、right、upLeft、upRight、downLeft、downRight |
| Direction mode | 选择 | fixed、random、noRepeat、weighted | fixed | 每次滑动如何选方向 |
| Directions | 列表 | 1–8 唯一 | — | 随机模式的候选集 |
| Direction weights | map | 每个 1–100 | 1 | weighted 的按方向权重 |
| Distance | integer | 1–10000 px | — | 屏幕模式行程 |
| Distance min / max | integer | 1–10000 px | — | 都设则每次取均匀随机 |
| Distance percent | number | 1–100 % | — | 区域模式行程,占区域的百分比 |
| Region | 矩形 | 屏幕百分比 | — | 手势所在的矩形 |
| Random offset | integer | 0–1000 px | 0 | 施于整个手势的抖动,保持在区域内 |
| Duration | integer | 50–10000 ms | — | 必填。 手势持续 多久 |
| Delay min / max | integer | 0–60000 ms | — | 手势后随机停顿 |
| Drag and drop | boolean | — | false | 把手势渲染为拾起-移动-落下-释放 |
| Swipe region | 矩形 | 屏幕百分比 | — | 屏幕模式:按此矩形而非整屏计算滑动 |
3% 安全边界
两端被夹在距每条屏幕边缘 3% 处。这挡住手势触发模拟器自己的边缘手势——通知栏、返回手势、最近应用滑动。你用此节点触不到屏幕绝对边缘,这是刻意的。
Duration 是手势时间,不是停顿
Duration 是手指移动的时间。长读作拖动;短读作快滑。它不是滑动后的延时——那用延迟范围或 Wait 节点。
Drag and drop 需要数字化器
dragAndDrop 渲染一个保持的触点——按下、移动、稳定、释放。只能经原生输入传输注入;没有框架回退。
端口
| 端口 | 走它的时机 | 必接 |
|---|---|---|
| Success | 手势已派发(或目标已在中央) | 是 |
| Failure | 解析出的行程太短,或点无法解析 | 否 |
| Timeout | 输入命令未按时完成 | 否 |
| Cancelled | 手势中途运行被停 | 否——永不被走 |
| Fatal | 断连,或参数无效(无方向、坏 duration) | 否——永不被走 |
基础示例
向上滚动一屏:
- Swipe area:Screen
- Direction:up
- Distance:
600px - Duration:
300ms
实际示例——只滚动一个面板
背包列表在屏幕右半;滚动整屏会移动它后面的地图。
- Swipe area:Region,画在背包面板上
- Direction:down
- Distance percent:
70% - Duration:
400ms
手势留在面板内,行程是面板高度的 70%——无 论面板多大都对。
高级示例——居中目标再动作
让地图自动化分辨率无关的模式:
注意 Wait 然后重查。滑动有动画;紧接读屏读的是动画中途。动作 → 稳定 → 验证是手势驱动自动化最可靠的结构。
最佳实践
- 用 Region 模式滚动特定列表。 这是滚动信息流和拖动整个世界之别。
- 重复滚动时随机方向与距离。
noRepeat避免相邻重复方向,远不那么机械。 - 要紧的滑动后总要稳定并验证。
- 优先中央模式而非自算像素距离。 它经得住任何分辨率变化。
- 拖动用长 duration,快滑用短。 300 ms 快滑;800 ms 拖动。
性能笔记
- 手势本身耗它的
Duration——400 ms 滑动至少阻塞会话 400 ms。 - 中央模式在距离大时可能发几个较短手势,避免飞过目标。长行程预算不止一个 duration。
- 随机延迟范围给每次滑动加真实墙钟时间。滚动 50 次的循环里,0–2000 ms 随机延迟 累加达 100 秒。
内存笔记
- Swipe 不持有帧。中央模式从上下文读一个已记录的 Find Image 结果;它不重新抓帧。
常见错误
| 错误 | 后果 | 修复 |
|---|---|---|
| 距离太小 | 被判太短 → Failure | 加大距离,或区域百分比 |
| 滚错东西 | Screen 模式移动一切 | 用 Region 模式覆盖目标面板 |
| 把 Duration 当停顿 | 下一节点紧接手势就运行 | 用延迟范围或 Wait |
| 滑动后立刻读屏 | 读到动画中途 | 等待,再验证 |
| 中央模式无上游匹配 | 没东西可居中 → Failure | 确保 Find Image 在路径上运行并匹配 |
| 指望滑到最边缘 | 被夹在 3% 边界 | 用放在所需处的区域 |
故障排查
每次滑动都走 Failure。 解析出的行程低于下限。区域模式里,小区域的小百分比可能只有几像素。
滑动滚了地图而非列表。 Swipe area 是 Screen。改 Region 并画在列表上。
中央模式什么都不做却走 Success。 目标已在中心容差内。正确行为,不是 bug。
Drag and drop 行为像普通滑动。
原生输入传输不可用。查流程的 nativeInputEnabled 开关和实例的 input mode。
FAQ
能在两个精确点间滑动吗?
旧流程可以(start/end),但是旧特性且依赖分辨率。优先方向+距离或区域模式。
随机方向保证多样吗?
noRepeat 从袋子取,不相邻重复方向。random 均匀且可能重复。
距离按屏幕像素还是设备像素? 按活实例配置的输入像素。
能居中 Read Text 找到的东西吗? 不——中央模式专读 Find Image 匹配。
相关节点
- Find Image——提供中央模式的目标
- Click——点击而非拖动
- Zoom——与滑动搭配框住目标
- Wait——手势后的稳定步骤