游戏动态

游戏机制练习簿:等宽按钮分配中的余数像素——4按钮在八种宽度中的像素分配(案例24)


一排按钮平分可用宽度时,除法不一定得到整数像素。若每个按钮独立四舍五入,最后总宽度可能超出容器或留下缝隙。明确分配余数,可以使边距与总尺寸精确对齐。

以下是一组输入完整的独立案例。先读清规则,再按时间或操作顺序记录中间状态;遇到与预期不同的结果时,检查首次出现差异的位置。案例使用明确限定的教学模型,不假定所有作品都采用相同的处理方式。

规则和原始数据

先扣除左右边距和固定间距,再把剩余整数像素平均分给按钮。每个按钮先得商,剩余像素从左到右各加一;位置区间右端排除,所有按钮至少有一个像素。

同一排4个按钮;每项[容器宽,左边距,右边距,间距] [[132, 7, 2, 11], [58, 11, 2, 3], [157, 8, 5, 12], [145, 12, 9, 6], [145, 5, 6, 11], [89, 6, 3, 11], [139, 10, 9, 5], [144, 5, 10, 7]]

逐步记录

容器宽132,左右边距7/2、间距11:可分配90,商22余2;按钮宽[23, 23, 22, 22],区间[[7, 30], [41, 64], [75, 97], [108, 130]],末端为130。

容器宽58,左右边距11/2、间距3:可分配36,商9余0;按钮宽[9, 9, 9, 9],区间[[11, 20], [23, 32], [35, 44], [47, 56]],末端为56。

容器宽157,左右边距8/5、间距12:可分配108,商27余0;按钮宽[27, 27, 27, 27],区间[[8, 35], [47, 74], [86, 113], [125, 152]],末端为152。

容器宽145,左右边距12/9、间距6:可分配106,商26余2;按钮宽[27, 27, 26, 26],区间[[12, 39], [45, 72], [78, 104], [110, 136]],末端为136。

容器宽145,左右边距5/6、间距11:可分配101,商25余1;按钮宽[26, 25, 25, 25],区间[[5, 31], [42, 67], [78, 103], [114, 139]],末端为139。

容器宽89,左右边距6/3、间距11:可分配47,商11余3;按钮宽[12, 12, 12, 11],区间[[6, 18], [29, 41], [52, 64], [75, 86]],末端为86。

容器宽139,左右边距10/9、间距5:可分配105,商26余1;按钮宽[27, 26, 26, 26],区间[[10, 37], [42, 68], [73, 99], [104, 130]],末端为130。

容器宽144,左右边距5/10、间距7:可分配108,商27余0;按钮宽[27, 27, 27, 27],区间[[5, 32], [39, 66], [73, 100], [107, 134]],末端为134。

每种布局的最后右端都恰好等于容器宽减右边距,余数已完整分配。

交叉核对与应用

逐个统计按钮宽度与固定间距,检查最后一项右端恰好落在容器宽度减右边距处。任意两个按钮宽度最多差一,额外像素只分配给前面的若干项。

从左到右发放余数是一种确定约定,也可以设计居中或交替分配,但不能在同一组测试里混用。确定性规则有助于减少窗口大小来回变化时不必要的边缘抖动。

建议保留原始输入、每一步状态和最终输出,再只改变一个条件做对照。重点检查空输入、相等边界、重复请求以及先后顺序;把规则约定、计算过程和显示表现分别核对,比只比较最后一个数字更容易找到原因。