我用 SwiftUI 做了个「用走路占领地图」的 App,踩了不少坑

起因:我不喜欢看步数

做这个 App 之前,我手机里装过好几款步行类应用,但基本都坚持不了多久。不是不想运动,是那个反馈方式提不起劲——每天盯着"今天走了 6824 步",很难让人有成就感。

我真正喜欢的感觉是「把空白填满」。就像扫雷、拼图、染色格子游戏,那种视觉上区域被逐渐覆盖的爽感,比任何数字都更直观。

于是大概两个月前,我把这个想法做成了一个 iOS App,叫像素征途(PixelGo),现在 App Store 上能搜到。


App 做了什么

核心机制就一句话:走到哪里,地图上对应的像素格就变成你的颜色

但「像素格亮起来」只是表面,底下的设计逻辑要复杂一些。每个 Tile 有等级、有路线层级(TileRoadTier),还有热力衰减——你昨天走过的路和三周前走过的路,视觉上颜色深浅不一样。我设计了几个衰减时间节点:

enum MapHeatRules {
    static let routeGlowSoftDecayDay = 4   // 路线光晕开始变淡
    static let routeGlowDecayDay = 7       // 路线光晕基本消退
    static let zoneEmphasisDecayDay = 14   // 区域高亮衰退
    static let tileResidualDecayDay = 30   // 残留底色消退
    static let tileResidualOpacity = 0.12  // 残留透明度
}

这样设计的目的是:地图上最亮的部分就是你最近最活跃的区域,老路线慢慢退成淡色,形成一种类似热力图但更有「游戏感」的视觉效果。有用户评论说看着像打了高光的城市地图,我挺满意这个描述。


连击系统:换一种驱动方式

传统步行 App 的驱动逻辑是目标型——今天要走一万步。我想换成连续探索的倍率奖励:走得越连续,奖励越高,有点像游戏里的 combo 机制。

设计上没搞太复杂:连续 5 天以上双倍积分,3-4 天 1.5 倍,每天有上限(dailyContributionCap = 50)防止刷数据。

早期内测版本没有容错机制,用户一旦断了就直接清零连击,我发现连击达到 5 天以上的用户比例极低。后来加了一个「容错日」(graceDays = 1),断签一天不清零,这个比例明显改善了。

这个观察让我意识到:惩罚机制太硬,用户不会咬牙坚持,而是直接放弃。容错日的决策当时基本靠感觉,后来验证是对的方向。


日历战报:数据可视化的设计取舍

每天的探索记录会聚合成一份「战报」(DailyExplorationDigest),显示今天点亮了多少格、走了多远、主要在哪片区域活动。

其中有个细节我挺满意:活跃强度分四级(0-3),根据当天新点亮的格子数量判定——0 格是 0 级,1-4 格是轻度,5-14 格是中度,15 格以上是重度。这个值直接驱动日历视图里每天色块的深浅,一眼就能看出哪天出门「扫图」了,哪天窝在家里没动。


踩过的几个坑

地图初始化的冷启动问题

用户第一次打开 App,还没授权定位、也没有缓存中心点,地图该显示哪里?如果默认用坐标 (0, 0),地图会落在大西洋中间的「Null Island」,体验非常奇怪。

我按照系统 locale 做了一个区域映射:中国用户默认显示上海陆家嘴,日本显示东京站,美国显示旧金山。逻辑很简单,但第一次打开的感受差很多,这类细节值得花时间处理。

多会话数据聚合的日期坑

用户一天可能分多段记录行程,需要按日期 key 合并成一条 DailyExplorationDigest。我用了 Dictionarydefault 下标做分组,代码很干净,但有一个容易忽略的细节:DateFormatterdateFormat 必须精确到 yyyy-MM-dd,否则跨时区用户会出现日期归错的问题。这个 bug 排查了挺久,记录一下给有类似场景的朋友参考。


上线之后

目前 App Store 评分 5 分,7 条评价,下载量还很低,基本靠朋友扩散。

用户反馈里有几条值得记录:有人说导入历史照片位置只支持近 3 年太受限(这个限制是我怕数据量大加的,现在看来应该让用户自己选);有人发现探索榜还不能用(这个功能确实没做完就上了,待补);还有人说图标「看着像游戏图标」——这个我自己也知道,设计是弱项,在 TODO 里。


最后想问问大家

做这个 App 的初衷是想验证一件事:把走路的反馈从「走了多少步」换成「占领了哪片区域」,会不会让人更有动力出门

从我自己用的体验来看,答案是肯定的。上周去买咖啡,特意绕了条平时不走的路,就因为那片区域在地图上还是空白。

如果你也有游戏化设计的经验,想请教一个问题:惩罚机制和容错之间你们怎么取舍?是靠数据跑出来的,还是设计直觉先行?我这个容错日基本靠感觉做的决策,想知道有没有更系统的方法。

App Store 搜「像素征途」或「PixelGo」可以找到,欢迎试用,有问题欢迎评论区交流。

posted @ 2026-04-26 19:26  samexxx  阅读(5)  评论(0)    收藏  举报