下载 App
开发日志3
为什么做
增量放置游戏的驱动力是「看着数字涨」。但只有自己的数字在涨,久了会失去参照。排行榜给的是外部参照——你练了二十分钟长出来的智能,和别人的比是什么水平。
对开发者来说它还多一层作用:能看见数据分布。谁在什么时候突破了哪一层、游戏时长和智能度是否匹配,这是判断数值曲线是否合理的直接依据。
一个不太好办的地方:智能度存不下
排行榜排序靠云端整数,而问题在于——这个游戏的智能度是指数增长的,后期能到 1e14 这个量级。如果云端整数是 int32(上限约 21 亿),玩 40 分钟就溢出了。
解法是对数压缩:
存储值 = floor(log10(智能度) × 10000)1e14 压缩后是 140000,1e308 也才 3080000,离上限很远。系数取一万,能区分 0.023% 的数值差异,排序精度足够。
但压缩有损,反解只能得到近似值。所以真实数值另存一份字符串——排序用压缩值,显示用真实值,两轨并行。
这次改了三点
之前榜单只拉前 10 名,而且划不动:用的是普通面板,超出部分直接被裁掉。
- 拉前 100 名
- 显示「我的排名」——云接口能直接查自己的名次。但只显示名次不够:如果玩家排在第 300 名,翻遍前 100 也找不到自己。所以在列表底部用分隔线单独补一条「你」,排在哪儿都看得见
- 可滑动——列表换成 ScrollView
踩的坑:ScrollView 在弹窗里撑不开
这个值得记一笔。ScrollView 的文档说,要让它在 flex 布局里滚动,得写 flexGrow = 1, flexBasis = 0。我照做了,结果弹窗直接塌了。
原因是弹窗算自身高度时,会先用无限高度测量一次内容。而 flexBasis = 0 的含义是「从零开始,靠父容器分配空间」——在无限高度的测量里没有可分配的空间,ScrollView 被测成 0 高,弹窗就只剩标题和按钮。
解法是给 ScrollView 一个显式高度。按弹窗的尺寸上限反推:标题 56 + 底部按钮 64 + 内边距 32 + 上方标签 40,剩约 380 给列表。这个数不是算出来的美学选择,是被容器约束逼出来的。






