框选工具可以为不同拖动方向赋予不同含义:一种要求对象全部位于框内,另一种只要对象有部分进入即可。若不看方向,同一大小的选择框也可能产生不同结果。
下面是一组独立的虚构游戏输入与逐步结果。先记录单位、编号和端点是否包含,再尝试自己推算,最后对照第一处差异。所有结论都以本例规则为前提;其他作品采用不同约定时,应按它自己的说明重新计算。
横向从左往右或同横坐标拖动时采用完整包含,反向拖动采用正面积相交。选择框按两端坐标规范化,宽或高为零时不选任何对象;包含允许边界相等,相交模式下仅仅碰边不算。
七个矩形[[6, -6, 7, -3], [-5, -6, -2, -1], [4, 3, 8, 7], [1, -6, 5, -2], [4, 4, 6, 9], [-1, -2, 2, 2], [-4, 1, -1, 6]] [[[2, 1], [-4, -6]], [[-1, 6], [4, -6]], [[-6, 2], [6, 4]], [[-6, 1], [7, 7]], [[-7, 0], [1, 1]], [[8, 1], [0, 5]], [[2, -2], [-7, -7]], [[-9, 9], [4, -7]], [[6, 0], [-2, 9]], [[-9, -8], [-8, -8]]]
从[2, 1]拖到[-4, -6],规范化框[-4, -6, 2, 1],使用正面积相交规则,选中编号[1, 3, 5],共3个对象。
从[-1, 6]拖到[4, -6],规范化框[-1, -6, 4, 6],使用完整包含规则,选中编号[5],共1个对象。
从[-6, 2]拖到[6, 4],规范化框[-6, 2, 6, 4],使用完整包含规则,选中编号[],共0个对象。
从[-6, 1]拖到[7, 7],规范化框[-6, 1, 7, 7],使用完整包含规则,选中编号[6],共1个对象。
从[-7, 0]拖到[1, 1],规范化框[-7, 0, 1, 1],使用完整包含规则,选中编号[],共0个对象。
从[8, 1]拖到[0, 5],规范化框[0, 1, 8, 5],使用正面积相交规则,选中编号[2, 4, 5],共3个对象。
从[2, -2]拖到[-7, -7],规范化框[-7, -7, 2, -2],使用正面积相交规则,选中编号[1, 3],共2个对象。
从[-9, 9]拖到[4, -7],规范化框[-9, -7, 4, 9],使用完整包含规则,选中编号[1, 5, 6],共3个对象。
从[6, 0]拖到[-2, 9],规范化框[-2, 0, 6, 9],使用正面积相交规则,选中编号[2, 4, 5, 6],共4个对象。
从[-9, -8]拖到[-8, -8],规范化框[-9, -8, -8, -8],使用完整包含规则,选中编号[],共0个对象。
十次选择结果依次为[[1, 3, 5], [5], [], [6], [], [2, 4, 5], [1, 3], [1, 5, 6], [2, 4, 5, 6], []],相同几何框也要连同拖动方向一起解释。
完整包含逐一检查四条边,正面积相交则分别检查横纵重叠长度都大于零。用相反方向画出同一个框,可以直观看到两套规则的差别,而不是只比较框的面积。
这些是本例工具的明确约定,并非所有游戏编辑器的默认行为。被选对象均为轴对齐矩形,不处理透明形状、旋转、层级或锁定状态。先确定几何命中,再讨论选择集合怎样加入或移除。
测试时先保留输入和中间状态,再只改变一个条件。空状态、正好相等、重复出现和最后一步都值得单独检查。若最终结果不符,应从第一处偏差查起,而不是在末尾随意增加补偿让数字表面一致。