两次点击很接近不一定都是双击,还要看按钮是否相同、点击位置是否足够接近。成功配成双击后,这两次点击也不能继续重复参与下一组。
本例只尝试相邻且尚未配对的点击。时间差不超过窗口、位置距离不超过半径、按钮相同才组成双击,并清空待配对项;不符合时把前一项记为单击,再把当前项作为新的待配对项。
时间窗口18、位置半径2,点击编号从零开始;事件字段为时间、横坐标、纵坐标、按钮。
编号 | 点击事件 | 本步配对结果 | 待配对编号 0 | [0, 2, 8, 'L'] | [] | 0 1 | [18, 2, 8, 'L'] | [['双击', 0, 1]] | None 2 | [36, 2, 8, 'L'] | [] | 2 3 | [54, 7, 1, 'R'] | [['单击', 2]] | 3 4 | [75, 7, 7, 'R'] | [['单击', 3]] | 4 5 | [93, 8, 5, 'L'] | [['单击', 4]] | 5 6 | [111, 0, 7, 'R'] | [['单击', 5]] | 6 7 | [116, 8, 6, 'R'] | [['单击', 6]] | 7 8 | [134, 6, 1, 'R'] | [['单击', 7]] | 8 9 | [155, 7, 8, 'L'] | [['单击', 8]] | 9 10 | [157, 5, 6, 'L'] | [['单击', 9]] | 10 11 | [175, 8, 2, 'R'] | [['单击', 10]] | 11 12 | [180, 1, 0, 'L'] | [['单击', 11]] | 12 13 | [198, 6, 2, 'L'] | [['单击', 12]] | 13 14 | [200, 0, 1, 'L'] | [['单击', 13]] | 14 15 | [205, 3, 6, 'R'] | [['单击', 14]] | 15 输入结束后完整分类:[['双击', 0, 1], ['单击', 2], ['单击', 3], ['单击', 4], ['单击', 5], ['单击', 6], ['单击', 7], ['单击', 8], ['单击', 9], ['单击', 10], ['单击', 11], ['单击', 12], ['单击', 13], ['单击', 14], ['单击', 15]]
表格中的编号只标识当前例子的元素,不应把对象身份、数组下标与计算数值混为一谈。阅读时先核对输入和边界,再沿记录检查每一步;空结果表示规则下没有可用项,并不是默认返回数值零。
三次连续点击最多形成一对加一个未配对项,不能把中间点击重复计算两次。距离比较用平方避免开平方;等于时间或距离阈值时仍算符合,输入结束后把最后的待配对项记为单击。
这里是在离线记录中分类,不规定单击回调必须立刻触发还是等待窗口结束。真实界面还可能区分不同控件、拖动状态和系统设置,不能只用这个简化规则替代所有交互行为。
练习时先独立复算一小段,再检查整体结果是否满足文中条件。遇到差异应保留中间记录并定位第一处不一致,而不是只调整最后答案。更换输入或操作规则后,需要重新计算,原记录只对这一例负责。