一个通勤三年的格子终于变金色了

每天同一条路上班,走了三年,今天它终于变成金色了。这不是什么游戏成就,是我自己做的一个App「像素征途」里的真实反馈。

我做这个App的初衷很简单:把日常出行变成一个人的收集游戏。你走过的地方,地图上对应的像素格子会被点亮。重复走同一条路,格子会升级,从普通变成金色大道。作为一个通勤党,看着自己每天的路线从灰色逐渐变亮、最终变金,那种成就感很难用语言描述。

核心设计:不联网不社交不比配速

做这个App的时候,我给自己定了几条死规矩:纯单机养成,数据存本地,我都看不到用户去过哪。不联网不社交不比配速,没有排行榜焦虑,没有社交压力。适合我这种下班只想安静走路的人。

在定位追踪这块,我做了三档追踪模式。省电档日常通勤够用,持续档坐高铁也不掉线。电量焦虑可以放一放。这个分档设计在技术上的考量是根据场景动态调整定位精度和上报频率,省电档用的是 significant location change 级别的监听,持续档则拉满 GPS 精度。

// 三档模式切换的核心逻辑
func switchTrackingMode(_ mode: TrackingMode) {
    switch mode {
        case .powerSaving:
                locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters
                        locationManager.distanceFilter = 100
                            case .standard:
                                    locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
                                            locationManager.distanceFilter = 20
                                                case .continuous:
                                                        locationManager.desiredAccuracy = kCLLocationAccuracyBest
                                                                locationManager.distanceFilter = 5
                                                                    }
                                                                    }
                                                                    ```
## 8×8 领地系统和科技树

除了格子点亮这个主线玩法,我还加了一个 8×8 领地系统和科技树。出差解锁新城市格子的时候真的会上瘾。整个地图被切分成像素级别的网格,每个网格有自己的状态机:未探索、已点亮、升级中、金色大道。状态流转的判定依赖于用户在该格子内的累计停留时长和经过次数。

这套网格系统如果用 ArkUIGrid 组件来实现会非常自然。虽然当前版本是 iOS 端,但我一直在关注 HarmonyOSArkTS 生态,Grid + LazyForEach 的组合处理大规模网格渲染在性能上很有想象空间。后续如果做鸿蒙适配,地图格子的渲染层大概率会用 ArkUICanvas 组件配合自绘来实现。

```arkts
// 鸿蒙端格子渲染的设想(ArkUI Canvas 方案)
Canvas(this.bindCanvasContext)
  .width('100%')
    .height('100%')
      .onReady(() => {
          let ctx = this.bindCanvasContext
              for (let cell of this.gridCells) {
                    ctx.fillStyle = cell.level >= 5 ? '#FFD700' : '#4A90D9'
                          ctx.fillRect(cell.x * CELL_SIZE, cell.y * CELL_SIZE, CELL_SIZE, CELL_SIZE)
                              }
                                })
                                ```
## 为什么选择纯本地存储

很多朋友问我为什么不做云同步。原因很朴素:位置数据是极度隐私的信息。我不想碰这个雷,也不想让用户有任何顾虑。数据全量存本地,App 卸载数据就没了,这是我对用户的承诺。

这个决定也让技术方案简单了很多,不用搞后端、不用搞账号体系、不用处理数据合规。独立开发者的资源有限,把精力花在核心体验上才是正经事。

## 写在最后

App Store 搜「像素征途」就能找到,免费下载。目前是 iOS 端,纯单机运行。

我是独立开发者,全靠口碑活着。如果你也在做鸿蒙开发,或者对这种 LBS + 游戏化的产品方向感兴趣,欢迎交流。特别是 HarmonyOS 端的定位服务(geoLocationManager)和本地持久化方案,如果有踩过坑的朋友,非常想听听你们的经验。
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐