写下这篇复盘的时候,我的这款手绘橡皮管动画风格的断头台番茄钟,已经提交Steam审核,就差最后一步就能和屏幕前的大家见面。这不是什么高大上的独立游戏,也不是功能逆天的效率神器,只是一个拖延症患者,为了解决自己的内耗,亲手做的“专属工具”。
从0到1,耗时3个月,踩过无数坑,也收获了前所未有的满足感。 路过的旅人啊,如果你也被拖延症困扰,不妨停下来看看这款手绘断头台番茄钟的制作经历,用一场“解气”的专注,打败内耗。
我想,很多人和我一样,都有过这样的时刻:打开电脑想学习或者赶项目,结果一不小心点开网页或者看一眼手机,不知不觉就半天过去了,什么都没做;明明列好了计划,却总被各种琐事打断,注意力像断了线的风筝,拖延到深夜只剩焦虑。结果被工作、学习逼到发癫,却找不到宣泄出口,只能在内耗中浪费时间,越拖越无力。试过无数番茄钟,不是界面太单调就是功能太复杂,坚持不了两天就放弃,反而拖延的报复时间更加凶猛。
这就是我最初的痛点——不是没有工具,而是没有一款能真正戳中我、让我愿意坚持的工具。市面上的番茄钟,大多是千篇一律的方方圆圆界面,只单纯计时,冷冰冰的,没有一点仪式感;我想要的,是一款“基于任务+番茄”的工具,能让我把要做的事和专注时间绑定,完成一项就有明确的反馈,而不是只看着时间流逝。最好每完成一个番茄就有明确的仪式感,给我足够强烈的反馈。
在网上看知乎查百度,翻遍了应用商店,找了一圈,也试用了不少。要么功能单一,要么风格不合心意,没有一个能满足我。春节假期前的一个晚上,又因为拖延赶不上进度对着屏幕再次改工作计划的时候,一个想法突然闪现出来:既然没有,那就自己做一个吧!
没有专业的开发经验,只有一个模糊的想法和一股“破罐子破摔”的冲动——既然决定做,就整点带感的。
我“烦”透了那些单调乏味的纯工具界面,它们让我提不起一点使用的兴趣,就像拖延症的“帮凶”。我想做一款不一样的,能让我在完成专注后,有“爽感”的家伙——毕竟,面对拖延带来的内耗,我们太需要一个能释放情绪的出口了。
拖延就像一颗让人烦躁的番茄,越拖越焦虑,不如亲手“结果它”?——这个念头一冒出来,就再也压不住。over and kill怎么样?能让我在完成专注后,释放一下被工作、学习逼出来的压力,好像有点意思哦。
于是,断头台的想象在脑袋里冒出来了!陛下,你好呀(手动比一个法式宫廷礼)——我想做一个带有夸张戏谑感的断头台,用大大的透视效果,强调刀刃下落的距离和速度,让每一次“斩杀”番茄的冲击,都够猛烈,够解气。这大概就是被各种DDL逼到发癫的人,最朴素的幻想吧。
首先它应该是一款桌面软件,小窗口的,但是我又不想做窗口,不带感,做透明底的无窗口小挂件。其次它是应该有哪些必须的功能点,思来想去,番茄钟不用讲,设置菜单必须的,可编辑的任务菜单必须的,emmm,最好再来个统计,这样自己干了多少看一看心里有底。
接下来就是构思这个小东西应该是什么样的小东西。把它从一个灵感具象成一个确定的画面。
番茄钟是核心,必须要有完整的计时功能——可以自定义番茄时长、休息时长,有清晰的计时提醒,能暂停、重置,满足不同场景的使用需求;其次,任务清单是我最初的诉求,要能添加、编辑、删除任务,标记完成状态,把任务和番茄钟绑定,完成任务后才能“斩杀”番茄,这种明确的反馈,才能让人更有动力坚持;最后,我还想加一个统计功能,记录每天完成的番茄数、任务数,看着自己的进度一点点增加,也是一种成就感的体现,而这份成就感,正是打败拖延的关键。
梳理完功能,就开始思考它们之间的逻辑关系,功能点怎么分类,怎能分配,怎么操作合理且顺手,都需要反复的推敲。有一部分在进行画面设计的阶段还要有调整的。不光要合理顺手,还有交互和画面要结合的自然且好看。
把功能点安排明白之后,框架设计其实就完成了大半。然后开始给这个框架进行“画皮”的步骤——上设计!(我最喜欢的工作)我始终觉得,一款能让人坚持用下去的番茄钟,颜值和体验同样重要。如何把界面做的好看有趣带感,仅仅靠灵感的灵光一现是不够的。断头台是什么样的?就要一点点打磨断头台的细节:透视的角度,刀刃的弧度、支架的纹理、下落的动态感,用图形去追逐,还原,匹配脑子里的那一下子灵感。每一笔都反复修改,只为了呈现出我心中那种“暗黑又有趣”的感觉。哪怕出上几十遍设计稿,也不想将就——不到位等于白干。
想法有了,设计稿也有了,接下来就是最实际的问题:用什么做?正好这段时间我在学习Godot引擎,想着不如就用它来做,既可以完成产品,也能当成学习的实践作业,一举两得。毕竟我还是要做游戏的!(苍蝇搓手)
作为一个刚接触引擎、只会基础命令和语法的程序小白,搭建功能框架的过程,比我想象中难得多。我先静下心来,之前梳理的自己最需要的功能远远不够,每一项细分出来,都得一条条列出来考虑细化——这些功能,从代码角度适合怎么做,哪些功能点和哪些功能点是一类,哪些适合用什么技术写,哪些表现是用什么功能节点实现。都要考虑到。可能这也是一个代码苦手的过度谨慎吧,不过小心没大错。这玩意是打地基,然后我就不厌其烦的问各家AI问朋友问同事。心里有底了之后才开始动手。
梳理完功能,就开始思考它们之间的逻辑关系——其实在画设计稿的时候,我就已经有了大概的方向,现在只是把这些想法落地,细化每一个功能的交互逻辑,确保使用起来流畅、顺手。比如,任务完成后,断头台如何触发动画,番茄被“斩杀”后有什么反馈,统计数据如何实时更新,这些细节都要一点点琢磨。我希望它不仅能解决拖延,还能带来愉悦的使用体验,让专注不再是一件痛苦的事。
五、编程:程序小白的逆袭,AI是最佳辅助(但不是万能的)
编程是我整个制作过程中最大的难关。作为一个刚刚学习完命令和基础语法结构的程序小白,面对复杂的功能代码,我不知道怎么把自己的想法,转换成引擎能识别的代码。这时候,AI成为了我的最佳辅助。
我开始尝试和Gemini对话,告诉它我要做什么功能,问它在Godot里应该怎么写代码。一开始,我以为AI可以一步到位,我殚精竭虑的把所有功能点按照模块全列出来,写了满满一大篇告诉AI,它也不客气,直接从建立脚本开始,把每个功能模块的代码一口气写完,我满心欢喜地复制进Godot,结果发现,根本跑不了!
又试了几次我才意识到,原来AI没那么“聪明”。写出来的代码,要么有语法错误,要么和我的需求不符,甚至在多轮对话中,会前言不搭后语,冒出一些从来没有见过的函数。
后来,我在网上各种查资料、和懂编程的朋友聊天,才知道问题出在“上下文限制”上——对上下文长度的限制,让它无法完整理解整个项目的逻辑。于是,我换了一种方式,把整个项目拆分成不同的大模块,再把每个大模块拆成一个个小功能点,挨个问AI,一点点调试。
虽然这样做,AI时不时的还是会出错,但大体上已经能写出能跑的代码了。而这样对话的方式也让原本对godot的认识逐步提升到了能够自己查找函数,修改数值调试,手动改代码的程度。每当一个功能成功实现,比如番茄钟能正常计时、任务能正常添加、动画能正常播放,我都特别振奋,甚至睡觉的时候,都在偷偷开心。最卡脖子的一项工作,就这样被攻克了!那一刻,我真切地感受到:原来,我也可以自己写出能跑的代码,也可以自己完成一个项目。这种“老夫可以自己产粮了”的成就感,真的难以言喻。而这份坚持,也让我更加坚信,只要不放弃,哪怕是小白,也能做出属于自己的东西——就像面对拖延,只要坚持专注,就一定能慢慢克服。
既然决定走夸张戏谑的风格,动画表现就不能敷衍。我寻思,经典的橡皮管动画那种夸张的肢体动作,正好契合这款番茄钟的调性——用轻松有趣的方式,化解专注的枯燥。更重要的是,我想过一把瘾——全部做手绘逐帧动画,因为我觉得既然要做复古味,那就用古法手作嘛。
绘制关键帧的过程,远比我想象中麻烦:先画线稿,打开洋葱皮,一边在大脑中想象着动态的样子,一边顾及和前后帧的对应关系,一点点调整线条、动作,哪怕一个微小的细节不对,都要重新画。
有时候,一个简单的刀刃下落动画,就要画几帧,可以画形变,就很爽;而一个简单的刀刃上升动画,就遭了罪了,一方面要顾及包体大小资源不能太多,再者上升的过程要足够细腻,每帧之间只有三个像素的位移,还要照顾透视的形变,画到手指发酸,眼睛发花;有时候,前后帧的衔接不流畅,就要反复修改,甚至全部重画。但每当看到自己画的动画,在引擎里流畅播放的时候,那种满足感,就足以抵消所有的疲惫。我仿佛能想象到,当用户完成一个番茄,看到刀刃落下、番茄被“斩杀”的瞬间,那种解压和解气的感觉——这正是我最初想传递的力量。
现在回想起来,这个决定真的又傻又执着,因为用spine做骨骼动画的效率更高。但是逐帧的魅力是任何其他形式取代不了的——每一帧的表现都是被你完全掌控的自由。我想让每一个动作都有温度,每一次“斩杀”都有冲击力,手绘逐帧虽然麻烦,但能让这款工具,多一份独特的质感,多一份属于我的心意。而这份心意,也希望能传递给每一个使用它的人,让大家在专注的同时,也能收获一份快乐。
代码能跑、功能能实现,只是第一步。接下来的日子,就是不断修BUG、改功能、加功能,一点点打磨细节,让这款番茄钟变得更实用、更有温度——我希望它不仅是一个工具,更能成为大家对抗拖延的伙伴。
其中,最让我满意的优化,就是“番茄小子”的出现。在实际测试运行的时候,我发现,每次番茄时长比较久,屏幕就会变得很固定,有点单调,缺乏一点活力。于是,我就想:不如加点活跃气氛的内容吧?毕竟,长时间的专注本身就很枯燥,一点小小的乐趣,或许能让人坚持更久。
加个小人铰锁链?这个想法一冒出来,我就拍了大腿——太合适了!什么样的小人儿呢?结合断头台和番茄的主题,番茄小子就这样诞生了:圆滚滚的身子,带着一点呆萌,一边铰锁链,一边陪着你专注,让漫长的番茄时间,多了一点乐趣。
画番茄小子的时候,脑子里情不自禁地致敬了我心爱的《辐射》,加入了一些小小的细节,算是一个属于我的小彩蛋。看着番茄小子在屏幕上动来动去,我突然觉得,这款工具,不再是冷冰冰的程序,而是有了自己的灵魂。我相信,有这样一个可爱的小伙伴陪伴,大家在专注的时候,也能多一份轻松,少一份枯燥,这也是我做这款工具的初心之一。
当所有功能都打磨完成,BUG也基本修复完毕,我突然觉得,既然自己做得这么用心,不如把流程走完,把它上架Steam吧——独乐乐不如众乐乐。或许,还有和我一样的拖延症患者,会喜欢这款不一样的番茄钟,让专注也能充满乐趣。
上架的过程,比我想象中繁琐得多,其中最折磨人的,就是多语言本地化(我的天,,)。原本以为,只是简单的翻译,结果真正做起来才发现,工作量一下翻倍:不仅要把所有文案翻译成不同的语言,还要重新设计、绘制不同语言的排版,确保在不同的屏幕上,都能正常显示,不出现错乱。然后商店页面和图片也要多语言。。
虽然过程很折磨,但也有不一样的乐趣——看着自己的作品,能以不同的语言,呈现在不同国家的用户面前,那种感觉,既紧张又期待。我一点点整理多语言的CSV表格,一点点调整排版,反复测试,只为了呈现出最好的效果。而且看多了这些异国文字的差异和相似,想象这些文明的历史交融变迁,也挺好玩。
现在,Steam商店界面已经开放,程序包也审核通过了!还差最后一步,就是直面大伙,看看我这个自娱自乐做出来的小东西,能不能得到更多人的喜欢。我没有花哨的营销,只有一颗真诚的心,也希望这款承载着我心血的工具,能真正帮到那些需要它的人。
从年前到年后,加起来整整3个月,从最初的一个念头,到设计稿、代码、动画,再到提交Steam审核,整个项目,终于算是八字有一撇了。当我点击“提交审核”的那一刻,心里没有想象中的狂喜,只有一种放下紧张的轻松,和一股难以言喻的期待。
这是我从0开始,独立完成的第一个项目。它麻雀虽小,却是我的心头肉——从功能设想、美术设计,到代码编写、细节优化,每一步,都完全按照我自己的想法,一点点搭建,直到落地。这种创造的成就感,或许就是人们常说的内啡肽吧,不强烈,却很持久,让我这几天,都觉得能量满满。
回头想想,这3个月里我收获的,远不止一款番茄钟软件:
我积累了宝贵的经验,从一开始的手足无措,到后来能熟练运用Godot引擎,能自己编写简单的代码,能独立完成美术设计和动画制作;我学会了如何规划一个项目,如何拆分任务,如何解决遇到的问题,这些经验,会让我以后的项目计划和评估,变得更加准确。
我还了get了在实践中学习的经验,或者说带着问题学习。这种方式的成长性非常高。
最大的收获是自信心!对于刚刚踏上独立游戏制作之路的我来说,这只是一小步,但也是一大步。它让我相信,只要有想法,有坚持,哪怕没有专业的基础,也能做出属于自己的东西。就像我们对抗拖延一样,不需要一蹴而就,只要一步一个脚印,慢慢坚持,就一定能看到变化。
顺便还学到了原来做完项目的复盘,还可以当成一次小小的“广告”(笑)——不是为了炫耀,而是想记录下自己的成长,也想让更多和我一样的拖延症患者,能找到一款适合自己的专注工具。这是我花3个月从0打造的专注工具,没有花哨的营销,只有真诚的心意,愿它能陪你一起,告别拖延,收获成长。
最后,我想特别感谢帮助过我的凯恩老师、天枢老师、panda老师,他们的支持和建议,让我少踩了很多坑,也让我在快要放弃的时候坚持了下来。比心!爱你们!
现在,我的番茄钟,就等Steam审核通过,和大家见面了(刚刚得知审核通过之后还要等两周)。它或许不完美,或许还有很多可以优化的地方,但它承载着我的心血,也藏着我对“打败拖延症”的期待。
我希望,它能成为你对抗拖延的小伙伴,陪你一起,在专注中收获成长,在坚持中遇见更好的自己!
评论区
共 1 条评论热门最新