给多个待播放动画分配不同数量的整数位置,可以用同一条规则把输入序号映射到动画。先累加权重形成区间,再找序号落在哪段,边界就很清楚。
这一篇用一组公开的自定义数据拆开计算过程。可以先遮住结果,依照约定逐项填写自己的记录,再用文末的复核办法检查。案例关注的是规则边界和状态变化,并不替任何具体作品规定玩法。
本例只讲给定整数如何映射,不假定输入随机,也不根据少数样本推断概率。权重均为正,序号从零到总权重减一,区间左端包含右端不包含。
按动画顺序累加区间;当前累计起点包含,下一个累计起点不包含。
动画['甲', '乙', '丙', '丁', '戊'],权重[2, 8, 5, 1, 8],合计24 输入序号[0, 1, 2, 4, 9, 10, 12, 14, 15, 16, 19, 23]
输入0落在[0,2)区间,选择动画甲,区间共有2个整数位置。
输入1落在[0,2)区间,选择动画甲,区间共有2个整数位置。
输入2落在[2,10)区间,选择动画乙,区间共有8个整数位置。
输入4落在[2,10)区间,选择动画乙,区间共有8个整数位置。
输入9落在[2,10)区间,选择动画乙,区间共有8个整数位置。
输入10落在[10,15)区间,选择动画丙,区间共有5个整数位置。
输入12落在[10,15)区间,选择动画丙,区间共有5个整数位置。
输入14落在[10,15)区间,选择动画丙,区间共有5个整数位置。
输入15落在[15,16)区间,选择动画丁,区间共有1个整数位置。
输入16落在[16,24)区间,选择动画戊,区间共有8个整数位置。
输入19落在[16,24)区间,选择动画戊,区间共有8个整数位置。
输入23落在[16,24)区间,选择动画戊,区间共有8个整数位置。
按输入顺序选到['甲', '甲', '乙', '乙', '乙', '丙', '丙', '丙', '丁', '戊', '戊', '戊']。
另一个检查方法是把动画名称各重复权重次,拼成一张表,再直接用序号查表。两种结果应一致;权重增加的是区间长度,而不是动画实际播放时长。
如果希望改变某段动画的出现比例,需要调整选择规则的权重;想让它播放得更久,则应调整动画时长。两者影响不同,不能只因为某个片段持续更久就断定它被选中的次数更多。
若实际观察与这个模型不同,先确认操作顺序、编号起点和边界是否包含,再检查是否漏记了前一步状态。每次只改变一个条件并保留原记录,通常比反复重做整段操作更容易找到差异。明确条件后,才适合把同一种方法应用到新的场景。