当前位置: 首页 > news >正文

我用 SpriteKit 给存钱罐加了物理引擎——聚沙攒钱 iOS 开发记录

我用备忘录记账三年,月底翻出来钱不知道去哪了,最长的一次记录只坚持了11天。

不是没试过专业记账 App。用了一周就卸了——不是功能不够,是太像在交作业。填完数字关掉,毫无存在感。存钱这件事本身没有任何反馈,坚持不下去很正常。

所以我想做一个不一样的东西。核心想法只有一句:每次存钱要有点仪式感,要看得见、感受得到。


硬币掉落这个功能,我改了三个版本

最开始打算用纯 SwiftUI 动画做硬币效果,.animation + offset 搞了两天,出来的东西像 PPT 切换,完全不对。

后来想到用 SpriteKit。把物理引擎接进来之后,硬币会有重力、会弹跳、会撞到罐子边缘堆积,感觉立刻对了。存款金额越大,掉下来的硬币越多,罐子里堆得越满——这个视觉反馈是我最满意的部分。

// 每次存款触发硬币生成,金额决定数量
func spawnCoins(for amount: Double, in scene: SKScene) {let count = min(Int(amount / 10), 30)for i in 0..<count {let coin = SKSpriteNode(imageNamed: "coin")coin.physicsBody = SKPhysicsBody(circleOfRadius: 10)coin.physicsBody?.restitution = 0.4coin.position = CGPoint(x: CGFloat.random(in: 80...scene.size.width - 80),y: scene.size.height + CGFloat(i) * 5)scene.addChild(coin)}
}

restitution 这个值折腾了不少时间。试过 0.7,硬币会弹出罐口飞到屏幕外,活像个弹球机;试过 0.2,堆叠效果像沙包往下砸,完全没有金属感。最后定在 0.4,弹跳感和真实感大概是我能接受的最佳平衡点。


双模式的设计取舍

产品层面我想了很久:要不要只做「存目标」这一种模式。

后来决定做两个。愿望模式针对短期具体目标,设定金额然后追踪进度;聚沙模式更偏 DCA 定投逻辑,每天或每周固定存入,复利计算器告诉你多久能攒到多少。

我自己就是两种需求都有的那类人——买 AirPods 用愿望模式盯着进度条,同时在跑一个每周 200 元的聚沙计划,两个目标并列放着互不干扰。这让我觉得合并在一个 App 里是对的,没必要非得拆开。

有一个功能最后删掉了:原本想加「储蓄排行榜」,用 Game Center 做朋友间比较。开发到一半发现跟产品调性完全不对,存钱不是竞技,搞成比赛反而扭曲。果断砍掉。


成就系统是怎么运作的

成就徽章这块,我在 BadgeDefinitions.swift 里用纯条件判断实现,没有复杂的状态机,就是一个 StatsSummary 结构体扔进去,每个 Badge 对应一个闭包。

比如「早起攒钱」徽章要求早晨时段存款 10 次,「夜猫子」反过来要求夜间存款 10 次。这两个我挺喜欢,因为它们不是简单的数量达标,而是跟用户的生活节奏挂钩。

连续 7 天打卡解锁「Week Streak」,这个逻辑碰到了一个边界问题:最初用 Calendar.current.isDate(_:inSameDayAs:) 判断是否同一天,结果 23:59 存款会被计为当天,00:01 存款被算成第二天,连续天数就多计了一天。修了两次,最后改成以「自然日」为单位做去重再计数,才稳下来。这种「差一天」的 bug 不仔细测真的发现不了。


每日语录不是凑字数的功能

QuoteLibrary.swift 里我用排列组合生成了 324 句存钱语录,主语和谓语各 18 个交叉,理论上全年不重复。

这个功能一开始我觉得可有可无,但自己用了一段时间后态度变了。早上打开 App 存一笔钱,顺手看到「一杯奶茶的钱,会让未来的选择权握在自己手里」,会有点触动,真的。每日小反馈的作用,比我预想的强。


目前的状态

版本跑到 1.8,功能基本稳定了。下载量不多,这类工具 App 冷启动本来就难。

但我自己一直在用,存了将近半年,比以前稳多了。对我来说这个 App 最大的价值可能就是这个——做着做着,把自己的存钱习惯给改了。

对了,这个 App 同时有鸿蒙版本,用 ArkTS 重写了主要逻辑,UI 换成 ArkUI。有一个比较头疼的地方:ArkUI 没有对应 SpriteKit 的物理引擎组件,硬币掉落动画我最后是用 Canvas + 手写帧动画模拟的,物理感差了一截,但至少能跑。两端并行维护,独立开发者说实话有点吃力,鸿蒙那块打算单独写一篇记录。

App Store 搜「聚沙攒钱」,或者直接:
https://apps.apple.com/app/id6758853486

http://www.jsqmd.com/news/702806/

相关文章:

  • 七段数码管显示数字0-9:从硬件原理到Verilog代码的保姆级解析
  • 2026年杀菌锅厂家口碑推荐:诸城市轩润机械(食品/蒸汽/喷淋式/水浴式杀菌锅)及同行参考 - 海棠依旧大
  • 手把手教你用树莓派搭建PTP时间服务器,给实验室设备做精准时钟同步
  • 如何快速掌握HS2-HF_Patch:面向新手的完整汉化增强指南
  • WindowResizer终极指南:如何强制调整任意窗口大小
  • 如何快速掌握英雄联盟LCU工具:3大核心功能完全指南
  • 像素语言·维度裂变器:5分钟上手,让普通文案变出10种创意
  • 终极解决方案:如何快速修复Windows系统依赖问题:Visual C++运行库一键安装指南
  • 终极解决方案:一次性修复Windows所有VC++运行库依赖问题
  • WindowResizer:彻底解放你的Windows窗口管理自由
  • OI免爆零指南
  • 抖音无水印视频下载:开源工具的技术实现与实用指南
  • Spring Authorization Server保姆级调试手册:手把手教你用Postman玩转四种授权流程
  • 真机调试太麻烦?试试用Genymotion模拟传感器和拖拽传文件来调试你的App
  • Windows下DBeaver连接Kerberos认证的Hive/Impala,我踩过的那些坑都帮你填平了
  • Hex2Spline保姆教程:从六面体网格到TH-spline3D的完整转换流程(附杆模型案例)
  • BilibiliDown:3分钟学会下载B站视频的跨平台神器
  • 聊聊杭州矿物标本制造商,哪家收费合理? - mypinpai
  • 从菜谱到流程图:4种SOP格式到底怎么选?附真实场景选择指南
  • 从VIO到GNSS:手把手教你实现松紧耦合的代码级融合(附Python/ROS示例)
  • 2026年选购地质标本,杭州靠谱厂家排名大梳理 - 工业推荐榜
  • 别再为VS+Qt配置QCustomPlot发愁了!手把手教你搞定三方库依赖(附常见错误排查)
  • 5分钟搞定乐谱数字化:Audiveris开源工具从入门到精通
  • 5分钟快速上手WechatBot:构建你的专属微信自动化机器人终极指南
  • Arm Total Compute 2022架构解析与优化实践
  • 告别Lambda和Kappa:用Flink 1.17和Iceberg 1.3.0搭建实时数仓,我们踩了这些坑
  • 基于 MATLABSimulink的 MMC 闭环仿真模型
  • 避坑指南:Ansys Icepak仿真结果异常(高温、不收敛、数据丢失)的5个常见原因与解决方法
  • Pytest插件生态深度游:5个提升你测试效率的神器(含pytest-xdist, pytest-html配置)
  • 5步构建稳定黑苹果系统:2025终极硬件兼容指南