Reading view

There are new articles available, click to refresh the page.

有没有觉得“延迟满足”就是扯淡!

asanelder: 当年在学校的时候,有机会恋爱,但想着应该好好学习,找个好工作,挣大钱,延迟满足找女朋友的欲望,这样毕业后能找到更好的女人。

结果呢。。。不说了。。。至今单身,走在路上狗都不多看你一眼。
至于那些上学就是“乱搞”男女关系,享受即时满足的,人家孩子都有了,活的老特么幸福了。

特么的,再也不信延迟满足了

开发了半年多的 羽毛球场 2.0 终于上线啦,球路练习起来[送码]

blaaibla:

4 年前我就设计好了,当时给开发伙伴在图书馆门口演示过。可惜没钱请他继续开发了。今年失业后,泡在图书馆半年多,终于开发好了。Badminton Zone 中文名称: 羽毛球场

App 链接

2.0 新增的功能:

  1. AR 支持:羽毛球场 2.0 支持增强现实功能,随时随地训练球路。
  2. 控制每一拍:你可以循环练习每个球路,不断训练,掌控每次击球。
  3. 声音提示:羽毛球场 2.0 会播放每一拍的声音,告诉你击球类型和落点位置。
  4. 暂停与播放:在播放球路时,可以随时暂停,便于你和搭档思考如何准备下一拍。
  5. 精确编辑球路:你可以编辑每拍的落点、高度和飞行时长,记录任意球路的精准数据。

具体新增的功能视频演示版本(有声音)

英文 https://youtu.be/FAf7IcMwBC4

中文 https://www.bilibili.com/video/BV1jd61YeEv7

打羽毛球让我很舒压,很开心。但打羽毛球想提升水平不容易。特别是业余爱好者,双打练习更是难以突破。所以我做了这个 APP ,羽毛球场。 主要的用法:

  1. 记录并练习单打、双打球路。
  2. 分析每一拍:步伐、挥拍动作、力量控制等细节。
  3. 通过反复练习,快速提高技能,掌握各种球路,提升羽毛球水平。

主要功能的预览

新增:AR imgur

新增:暂停 imgur

设计改进 imgur

编辑改进 imgur

送码

因为在 V2EX 上找到很好的合作伙伴过,另外我遇到的开发问题,社区用户也非常热心指导。非常感谢这个社区。 所以按质数的前 10 个数字来分别给留下邮箱的用户发兑换码。 谢谢。

国产键鼠真的好用,已经彻底抛弃传统大厂了。

xtx:

去年买了个国产键盘,300 出头的价格,不管是功能,颜值,轴体都完爆我 1000 买的 filco ,一点都不夸张,filco 已经完全吃灰了。

前两天 300 出头买了个国产鼠标,对比我现在用的 gpw 一代,有几点优势

·目前市面上最顶级的传感器,无线高达 8k 的回报率,虽然我也用不上,但是对比 gpw 最高 1k 的回报率,遥遥领先。

·优秀且轻量的网页驱动,罗技的驱动软件笨重不说,设置的自定义按键必须保持软件常驻后台,国产鼠标直接网页设置,快速且界面清爽,设置完直接退出网页,完全不影响自定义功能,又是遥遥领先。

·国产鼠标光微动秒杀机械微动,罗技的微动有多容易双击,不用我多说了,我自己就换过两次货,一次 g304 ,一次 gpw 。

·极为先进的 type c 充电口。🌚

·价格只有 gpw 一半。

给我的感觉就是从老旧油车换成了国产新能源,这两年国产物件的发展,让我体会到了产业链齐全和工业大国带来的好处,让普通消费者可以真正买到物美价廉的东西。

国补之后到底有没有便宜?

jobscolin:

主要是大家电 2024 年 9 月突然来了个国补,当时也不明白是个啥,等到我反应过来想去买的时候( 12 月),发现好像价格也没便宜啊?无良商家先涨价再国补? 说是 2024 年 12 月结束就没有国补了,这两天又看到淘宝上已经开始 2025 国补了

我副业收入每月只有千八百块, V 友们都是怎么赚外快的?

GoRuby:

我尝试了多种赚取外快(所谓副业)的方式:做站长接流量主广告、有偿答疑、开知识星球、写专栏、做视频教程、卖软件、基金股票、做公众号接商单推广,甚至还参加过喜马拉雅的配音培训、帆书的社群运营师培训。

说实话,大部分都赚不到钱(当然也可能是我的操作水平不行),少部分赚辛苦钱,比如有偿答疑远程帮别人解决问题、开知识星球,这部分总共也就赚了几千块钱,还不如捐给腾讯公益的多。长期赚钱的是极客时间的专栏(我曾经写过一个《运维监控系统实战笔记》的专栏)和公众号偶尔的商单,这俩加起来平均每月也就是千八百块的。算是较稳定收入。基金股票就是一年挣钱一年亏钱,最近改成长期持有银行股稍微好了点。

不知道 V 友们都是怎么赚外快的?大家觉得哪种方式靠谱?亦或,还不如把时间花在提升工作技能上,老老实实谋个工作岗位,时间投入的性价比反而更高?

我是如何从零开始手搓一个独立游戏并上架 Steam 的

hhacker:

每一个游戏玩家心中, 都有一个自己做一款游戏的梦, 费劲千辛万苦后, 我成功制作了一款独立游戏并在 2025 年 1 月 1 日上架了 Steam.

本文既是对这个过程的一种纪念, 也是对游戏制作这个话题留下一些自己的思考和总结, 如果能让后来者少踩几个坑, 就更好了.

我将按时间线索将整个游戏制作和发行过程展现出来, 文章较长, 感谢你的耐心阅读.

源起 2019

我是一个 80 后, 在 90 年代伴随着电子游戏成长起来的一代人, 在读书的时候曾经有一段时间沉迷游戏, 玩三国志和文明系列玩到深夜.

我父亲实在看不下去了, 对我说了一句话: "玩游戏厉害算什么, 有本事自己做一个啊", 当时还小, 也没有能力制作一款游戏, 可能是年少时的那种不服气吧, 这句话我就一直记在了心里.

后来参加工作了, 和大多数社畜一样, 每天累得跟狗一样, 回家就只想躺着休息, 连打开电脑玩一把游戏的兴趣都没有了.

2018 年下半年, Steam 上的独立游戏中国式家长火热, 我正好也玩到了这款游戏, 并向我的朋友推荐了它.

然后在 2019 年春天, 我晚上加班加得心烦意乱, 工作堆积如山, 一眼瞥见了加班了一小会儿就想溜的胡大胖同学, 我说: "你陪我加班吧, 我做完这点事情, 我们就玩暗月来袭", 然后胡大胖同意了.

暗月来袭是当时很火的一款 DOTA2 地图, 我们之前从来没有通关过, 就在那个晚上, 我们打到了历史最佳记录-倒数第二关.

然后在黎明到来前, 胡大胖说:

"加班其实是有一定概率猝死的"

我说:

"要不我们做一款游戏吧, 就叫**中国式加班**"

胡大胖表示同意, 然后我们一起构思了这么一个特别的游戏, 当时胡大胖还并不知道, 他将是这个加班游戏的主角原型.

所以在 2019 年五月, 我初始化了这个游戏项目的 Git 仓库.

萌新的进击

虽然对制作游戏一无所知, 但是我知道很多游戏引擎, 比如 rpgmaker,cocos2d,unity,虚幻 3, 当时实在没有心思再投入时间学习这些引擎.

所以我就在想, 能不能用我现有的技术栈来做这个游戏?

我就决定先用前端(Vue)+Electron 先做一个 DEMO 出来.

然后 DEMO 很快就出来了, 它大概长这个样子:

贴图

点击新建游戏后出现几个对话, 就这么简单.

贴图

懵懂间, 我意识到了自己需要制作一个游戏脚本引擎系统,不过作为一个 DEMO ,我还没有把脚本引擎添加进来。

一切似乎都很顺利, 然后我开始盘算我还需要什么东西才能完成这个游戏, 很明显, 我需要 2D 美术资源用来表达人物立绘和场景, 需要有音效和背景音乐.

我决定先从最简单的音效和背景音乐开始, 音效在网上免费可商用的很多, 背景音乐我选择直接从 audiojungle 购买, 总共花了 800 人民币左右.

然后是美术资源, 我从淘宝上找了一个画手来绘图, 当时想得很好, 一边制作游戏, 一边按照规划输出美术资源.

我当时是以 200 一张的价格向画手定制的, 我们很快敲定并输出了基础的 UI 图.

在输出场景和人物图时, 我和画手都付出了相当大的代价.

当时我们输出一张图需要以下几个流程:

  1. 我文字描述想要的场景/人物特色, 尽可能地详细, 并配上例图

  2. 画师制作线稿

  3. 我和画师敲定线稿, 如果和我的想法有偏差, 会对线稿进行调整

  4. 画师细化线稿并上色

  5. 画师根据我的反馈, 对成品进行优化和调整

刚开始还不觉得, 但是后来我发现, 这样出一张图的实在是太大大大大大大啦!

当时我们做了一些这样的图:

贴图

贴图

贴图

贴图

![贴图]( https://hhacker.com/wp-content/uploads/2025/01/小型公司 1.png)

然后我意识到这样一个问题, 我根本没有足够的资源去得到这些我想要的美术素材, 所以在付出了 8700 元之后, 我选择了将这个项目封存, 不再继续.

不管是时间成本还是金钱成本, 都不是当时的我能够承受得了的.

黎明的曙光

就这样又过了几年, 我时不时还想起这个游戏项目来, 带着深深地遗憾, 因为我从来不是一个喜欢烂尾的人, 但是人到中年, 也学会了接受很多的客观现实.

转机出现在 2022 年, stable diffusion 横空出世, 同年 12 月, chatgpt 正式上线, 我很快意识到, 也许我现在有机会完成中国式加班了.

在研究了 sd 很久之后, 我确信这个东西生成的图片即便存在这样或那样的瑕疵, 但却是我唯一能够低成本获得 2D 美术资源的方法.

于是我决定重启中国式加班项目.

重启的第一件事, 我决定制作一个路线图表格, 这是这个表格在游戏最终完成后的样子:

贴图

我决心按照这个表格严格执行,立马开始了游戏玩法设定的工作。

在设计玩法时,我考虑到了自己的精力有限,所以把整个游戏的玩法设定得特别简单,心里想着玩法的短板可以用丰富的剧情去补充,游戏类型确定为SLG 模拟经营

其实对于独立游戏而言,剧情代表着巨大的工作量,不过对于当时的我而言,并没有这种认知。

我用自学不到一个星期的 Adobe XD 尝试制作了这样一个原型,以下是抽取的几张原型图片:

贴图

贴图

贴图

这个原型很粗糙,它的最大的价值就是把我脑海里这个游戏的样子用图片的形式展现出来,并且我知道后续原型里这些设定不会有特别大的改动了。

时代不同了, 大人

我还需要彻底解决美术素材的问题,所以我特意购买了一台电脑,因为预算有限,显卡是用的 4060Ti 。

然后我开始尝试使用 sd 进行 AI 出图,在这个过程中,我遇到的最大的问题是,如何保持人物/场景风格的一致性,想了很多办法,最终采用的是在 prompt 前置风格描述的方式。

最开始的时候,我是把出图 prompt 用中文描述出来,再用 DeepL 翻译为英文,最后在 sd 里炼丹出图。

但是这种方式有个弊端,对 prompt 的要求非常高,写 prompt 也不是一件容易的事,然后我想了个办法,让 Chatgpt 去帮我写 sd 的 prompt ,Claude 出来之后我就把 Chatgpt 换成了 Claude 。

AI 写的 prompt 非常详细,sd 也能更好的理解 prompt ,但是仍有一个问题,就是无法生成同一场景或人物的细微变化,比如一个人在不更换服装和发型的情况下,要出一张不同动作的图,这就很难,即便我用了 ControlNet 去约束,新出来的图,在服装或发型上,总有些细微的差别,无法做到一致性。

所以我干脆放弃了人物立绘的动作多样化,直接一个人物一张图用到大结局,这样就简单多了。

贴图

解决了美术素材的问题,我开始从 0 研发一个简单的游戏引擎,说是引擎,但其实最核心的部分只有一个,就是游戏事件脚本引擎,因为整个游戏都是以事件驱动的。

很快我就构建好了事件脚本系统, 我把事件脚本分为两部分, 一部分是事件条件, 一部分是事件内容, 我把它们都写入一个 Sqlite 数据库中, Sqlite 的数据库其实就是一个文件, 也比较简单且易于管理.

事件条件主要就是人物的一些属性和时间/前置任务等等, 单独使用了一张表保存.

事件内容要稍微复杂一些, 我基于 Markdown 设计了它的基础语法, 最终看起来是这样的:

1. 对话
新垣结衣: 今天我带着**里美酱**一起来的噢.

2. 场景切换
<帝企鹅大楼 3301>
<过场场景>$ /* 隐藏 UI */
<游戏结束>+ /* 直接切换 */
<> /*空场景, 延迟事件执行 1s*/

3. 定义分支
# 相信陌生人
陌生人:你好,我是陌生人.

4. 选项跳转分支
1. 要相信他吗?@相信陌生人
2. 不相信他!@不相信陌生人
3. (角色属性.幸运 > 80) ? 我想赌一把 @相信陌生人

5. 场景加载/取消 NPC
* NPC1
* NPC2
~ NPC3

6. 跳转分支
(角色属性.上级满意度 < 20) ? @条件跳转某分支
(角色属性.名字 == "新垣结衣") ? @条件跳转某分支
(系统属性.随机数 < 0.7) ? @随机跳转某分支 /* 70%概率*/ @直接跳转某分支 7. 画外音 > 平等地剥削劳动力,是资本的首要的人权。

8. 提示
[**里美酱**对你的好感度提升了]+
[你受到了暴击伤害]-

9. 属性修改
(系统属性.某角色 = 解锁)
(角色属性.精神上限 = $ + 100)
(角色属性.底层螺丝钉 = 已激活 @3 天)
(角色属性.休息日 23 点 = 睡觉*) /* 带*号为锁定卡牌 */

10. 播放音乐
{平静 1.mp3}

然后我再根据事件脚本的语法去实现整个游戏引擎, 当时为了学点新东西, 放弃了第一个 DEMO 时使用的 Vue, 转而使用了 React.

其实我对 React 一无所知, 但是好在有 Github copilot 的帮助, 很快就上手了

整个游戏引擎前后耗时约 6 个月, 然后我用这个引擎又做了一个 DEMO 版本, 以测试事件脚本引擎能否正确运行.

结果很幸运, 它真的可以运行起来.

真正的阻力

然后我兴高采烈地开始写游戏大纲, 包括游戏背景大纲和游玩角色大纲, 当时计划的游玩角色总共有四个, 分别是胡图巴(倔强的韭菜),肖望荣(中年悲歌),孙西里(小目标),赵浩(拖延症患者的梦), 第三个角色赵浩其实就是以我自己为原型设计的.

大纲写好以后我开始按照原定计划为每一个角色剧本写配套的小说, 第一个角色胡图巴的配套小说写了几万字后, 我突然感觉, 这东西写不完了.

人这种生物一旦在付出努力未能实时获得反馈时, 就会变得极其懒惰.

我也是这样, 我就在步子迈大了小说完不成了和我再抽点时间写写之间反复徘徊.

最终进度非常缓慢.

后来有一天我实在忍不了了, 我就想, 这个小说真的是有必要的吗?

我是在做游戏, 又不是在写小说.

所以我干脆把整个小说系统在游戏里给去掉了, 去掉之后浑身舒坦, 游戏研发进度飞速发展.

完成和完美

经过了一段时间剧情脚本编写之后, 我又开始偷懒了, 因为我感觉自己的的确确没有享受做游戏这种事.

做游戏和玩游戏完全不一样, 做游戏不止很困难, 并且你获取不到玩游戏的那种快乐, 也就是在游戏交付测试之前, 你基本得不到什么正向的反馈.

然后我在做加班游戏的时候开始摸鱼.

这一摸又是很久, 久到我自己都受不了了, 我打开手机写下了这样几段话:

中国式加班从去年到今年已经两年了还没完成,需要进行反思和总结,找到加快开发进度的方法。
## 原因
1. 惰性
人总是趋向于做容易的事,容易取得成就感的事,所以把空闲时间大量花在了看视频玩游戏上
2. 难以进入心流
开发过程中无法全神贯注,并且不享受游戏开发的过程,创作和和玩游戏的感觉完全不一样,无法受到实时激励
3. 没有紧迫感,没有计划
整个事情没有时间节点的压力,现在时间比较充足,也没有经济上的压力,就无法高效地推进任务
## 解决方法
1. 加长那些简单获取多巴胺的事项的路径
比如删除游戏,限制抖音等 app 的使用时间,解放碎片时间,使得专注时间更长
2. 设定截止日期和任务计划
每天回顾这个计划并坚定按照计划的时间和工作量去推进,尽可能的分解大的任务为小的任务
3. 让创作的过程变得更有趣
让创作游戏脚本的过程更简单并且更有趣,甚至像玩游戏一样去做游戏,或者边做边玩
4. 将做游戏这个事放入重要且紧急的象限里
放弃对部分品质和细节的追求,尤其是场景图和人物图等资源的生成,把做游戏这件事设定为目前最重要且需要快速完成的事,放弃对销售量的预期,只专心到“完成它”这一件事上,哪怕因为过于粗糙导致最终玩家评价不好,至少这件事我“完成了”,也许有瑕疵,也许压根就不好玩,但是“完成了”对我而言就很有意义
5. 使用合作的力量,引入其他人参与,以更多的空间力量去执行任务
6. 把路线图表格保持打开状态,随时提醒自己,根据进度更新路线图,预计好工期

这样游戏的研发进度再一次飞速推进, 到了接近胡图巴的游戏大纲中最后一段主线剧情时, 我又陷入了畏难情绪中.

我一想到就算这个做完了, 还有 3 个游戏角色要做, 我就浑身难受, 觉得根本完不成了.

然后我找胡大胖吐槽, 说做游戏好难啊, 胡大胖说, 那你就做简单一点啊, 先做出来再说.

我想了想, 要怎么才能加快整体的进度呢? 要不直接减少可游玩的角色吧.

然后我就把除了胡图巴之外的其他三个角色都给删掉了.

这下进度条狂奔, 直接到了 90%.

然后我开始赶工, 只以完全主线剧情为唯一目标, 原本计划了很多的分支剧情, 不想做就不做了吧.

就这样游戏主体很快就完成了.

AI 音乐

给游戏设置背景音乐的时候, 我一开始仍然是使用的几年前购买的音乐素材包, 后来一想, 时代已经变了, 为什么不用 AI 来生成游戏的背景音乐呢?

说干就干, 我注册并购买了 Suno 的会员, 花费 10$, 然后生成了乐器伴奏的纯音乐作为游戏的背景音乐.

后来我想, 要不要在游戏的主菜单界面放一首人声的主题曲呢?

我觉得这个主意很棒,并且很简单, 成本又低, 因为 Suno 刚好也支持生成人声的歌曲, 于是我开始写歌词.

一开始的时候想让 claude 帮我写一首押韵的歌词, 但是 AI 生成的歌词达不到我预期的效果.

于是我决定自己写一首歌, 歌名就叫《天命打工人》, 最终完成的歌词如下:

verse 1:
清早闹钟又响起
地铁里面深呼吸
打卡上班很着急
工作已在等着你

chorus:
九九六, 九九六
熬夜加班伤身体
零零七, 零零七
摸鱼才是硬道理
九九六, 九九六
咖啡续命撑到底
零零七, 零零七
我要变成万人敌

verse 2:
这个需求很简单
怎么实现我不管
老板画饼要吃饱
生活娱乐全扔掉

chorus:
九九六, 九九六
熬夜加班伤身体
零零七, 零零七
摸鱼才是硬道理
九九六, 九九六
咖啡续命撑到底
零零七, 零零七
我要变成万人敌

bridge:
打工人, 打工魂
打工人打开一张门
打工实在太费神
打工人要做人上人

verse 3:
凌晨四点的夜光
照亮回家的方向
忘了加班的烦恼
生活多一点希望

ending:
九九六, 九九六
熬夜加班伤身体
零零七, 零零七
摸鱼才是硬道理
九九六, 九九六
咖啡续命撑到底
零零七, 零零七
我要变成万人敌

当我用 Suno 生成歌曲时, 意外出现了, Suno 生成的中文人声歌曲总是有部分吐词不清楚, 而且有一些词会怪异地使用粤语的发音(推测 Suno 使用了很多粤语歌曲进行训练), 不管我怎么调整都没有用, 我甚至用带声调的拼音作为歌词放 Suno 里生成, 也还是不行.

然后我想, 外国的月亮也不圆, 我们国内有没有同类的 AI 音乐网站呢?

欸, 还真让我找到了, 就是国内的海绵音乐(字节系), 我用同样的歌词贴进海绵音乐了, 不到 5 分钟我就得到了发音清楚的摇滚音乐, 虽然海绵音乐生成的音乐没有 Suno 那么音色饱满且充满细节, 但是胜在发音清楚, 让人有听下去的欲望.

如果想听一听的, 可以打开这个抖音链接试听:

https://v.douyin.com/iyMKtt8p/

多国语言翻译

最后要做的是多国语言翻译, 因为一开始我就使用了 i18n 库, 所以这部分工作主要就是翻译 i18n 字符串.

我为游戏提供了几种语言, 简体中文, 繁体中文, 英语, 日语.

我尝试使用 claude 去翻译 json 字符串, 经过一系列尝试后, 使用以下 prompt 获得了很好的效果:

以下是一些游戏的 i18n 对话文本, 将其 value 翻译为英文, 请不要修改 key, 翻译后的内容需要全年龄段适用, 请一次性翻译完成, 请务必一次性翻译完成, 文本中的**标记或其它可以转义的标记请对其进行保留, 输出内容为 json, 用 inline code 的方式输出

但是手动调用 claude 去翻译的工作量实在是太大了, 我就想能不能调 claude 的 api 呢? 结果卡在了付费这一步, 没有合适的外卡进行支付, 我的国内 visa 卡并不能支付 claude 的费用.

经过一番搜索, 我找到了 rapi 的 claude api 服务, 其实这个服务的提供者也只是转发了 claude 的 api 服务(不知道这样是不是违反 claude api 的 tos 的), 好处是 rapi 的支付渠道很好, 可以接受国内的 visa 卡付款.

搞定了 api, 我直接在 copilot 的帮助下写了一个 python 脚本去批量地使用我研究出的 prompt 对 i18n 文本进行翻译.

这个脚本在翻译完后还会自动检查是否有漏掉没有翻译的 i18n key.

然后翻译工作就简简单单完成了, 前后没有超过半天.

安卓移植

这个时候我其实就已经想发布内测版本, 把游戏发给我的朋友们玩了.

但是当我表达出这个意图时, 他们纷纷表示, 坐在电脑前玩游戏太奢侈了, 有没有手机版?

好吧, 虽然不打算发行移动版本, 但还是移植一个安卓版本吧.

然后我学习了Cordova的使用, 并打出了一个 apk 包.

放手机上运行, 直接白屏, 想想也对, 移植工作可不只是打包 apk 这么简单.

我需要把原来所有涉及到文件读取的地方, 改造成调用安卓 API.

因此我重新设计了 Files 库, 区分对待 PC 和安卓, 游戏中所有涉及到文件的地方统统使用这个 Files 库.

折腾了两天之后, 游戏终于可以在手机里运行了.

朋友圈内测

我兴高采烈地发了一条关于游戏内测的朋友圈:

贴图

第一时间就发给了胡大胖, 结果胡大胖说, 运行白屏.

我当时的表情是: ????????????

我的第一反应是: 在我的机器上好好的啊

一问才知道, 他的手机是安卓 11, 所以肯定是一些兼容方面的问题, 安卓 11 的 webview 没有后面的安卓版本高.

我又花了两天通过调试安卓 11 的虚拟机解决了这个兼容问题.

胡大胖对游戏开始了非常严谨地测试, 一直到最后我点下游戏发行的前一刻, 他还在废寝忘食地测试游戏, 一遍一遍地玩已经玩过很多遍地剧情, 在此再次对胡大胖表示感谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢!

在游戏的测试中, 不断发现有新的 bug, 但是改 bug 并不让我感到痛苦, 所以整个过程都很顺利.

Steamworks 注册

在测试游戏的过程中, 我想起要去注册 Steamworks 去发行游戏了(其实这一步应该更早的进行), 赶忙注册了一个 Steamworks 账号.

注册账号的过程中, 支付了 100$用于购买发行坑位, 按照 Steam 的说法, 当游戏销售额达到 1000$时, 这 100$会还给我.

然后是填写美国的税务表, 就按身份证上的信息填写就可以了.

填写完, 很快 steamworks 会提示需要上传补充信息, 其实就是身份证的正反面和手持身份证的正面照, 照做就可以了, 我一开始没有仔细看英文的提示, 没有上传手持身份证的正面照, 税务表被打回来了一次, 最后提供了手持身份证正面照就成功了.

这个税务表的审核如果顺利的话 2-3 个工作日即可完成.

注册好 steamworks 后我做的第一件事, 就是给游戏定价.

因为我也没有打算能够回本, 当然也不奢望销量会爆, 所以我想要不就把价格设置得低一点吧, 回本是不可能回本了, 那就国区卖 9.9 人民币, 美区卖 1.99$.

其实我还可以定得更低一些, 但又觉得那未免也太不尊重自己了, 就算了.

(如果有实在囊中羞涩又想玩这个游戏的朋友, 可以通过商店页面的联系方式找到我, 我可以免费送你 CD-KEY.)

Steam 商品页准备

接着我开始准备 Steam 的商品页, 按照 Steamworks 里的表单一项项填写就可以了, 虽然这个商店管理后台诡异且充满了屎山的味道, 但还是勉强可以使用.

唯一要注意的是上传商店图片素材时它是根据图片尺寸来自动填充到对应的表单位置的, 所以图片的尺寸一定要符合它的要求.

我电脑上没有 ps,我是直接到 Photopea 网站上调整的素材大小.

然后我用剪映制作了一个极其粗糙的宣传片, 因为我觉得商店页面有个游玩视频感官上会更好一些.

这里因为我游戏提供了繁体/英语/日语, 游戏商店我也进行了繁体/英语/日语的本地化设置, 主要是游戏描述的文本.

全部设置好后提交商店审核, 然后因为一些小细节, 审核被打回来了一次, 修改后, 重新提交审核就通过了.

审核通过后, 商店就可以在 Steam 里搜索并被玩家看到了, 这个时候 Steam 会赠送一些曝光, 游戏愿望单每天都有增加.

这里前后花了一个星期的时间, 这里我犯了一个错误, 商店审核后没有立刻点击商店发布, 导致游戏发行时间延后了, 因为游戏正式发行时间必须在商店页面发布两周以后.

接着是游戏主体的审核, 这里其实并不需要提供游戏的最终版本, 而是只需要一个接近最终版本的游戏版本的就行了, 所以即便有 bug, 也可以提交上去供 Steam 审核.

第一次审核时 Steam 又找了一个商店页面的问题打回来了, 并且说最好是支持一下 steam overlay, 就是进入游戏后按 shift+tab 出来的那个东西.

我想这应该不难吧, 把商店的问题改好后, 就找了 steamworks.js 库去适配 steam 的 api, 结果出来的效果不行, 一按 shift+tab 界面就卡死了.

后来在网上一篇文章里找到了原因, 是因为 electron 渲染的网页是不会实时刷新的, 这和普通的游戏不一样, 按下 shift+tab 后 steam overlay 虽然有出来, 但是就消不掉了, 我在那篇文章里也找到了对应的 workaround:

function initSteamOverLay() {
function fakeGameloopForSteam() {
const canvas = document.getElementById(
"fake-refresh-steam"
)
const styler = canvas
styler.style.width = `100vw`
styler.style.height = `100vh`
const ctx = canvas.getContext("2d")
ctx.clearRect(0, 0, 1, 1)
// Not sure if this could work if fully transparent or if setting CSS opacity to 0, I haven't tried yet
ctx.fillStyle = "rgba(0, 0, 0, 0)"
ctx.fillRect(0, 0, 1, 1)
requestAnimationFrame(fakeGameloopForSteam)
}
const canvas = document.createElement("canvas")
canvas.id = "fake-refresh-steam"
canvas.width = 1
canvas.height = 1
const styler = canvas
styler.style.position = "fixed"
styler.style.top = "0px"
styler.style.bottom = "0px"
styler.style.pointerEvents = "none"
styler.style.zIndex = "30000"
document.body.appendChild(canvas)
fakeGameloopForSteam();
}

然后我又提交了一次 steam 游戏审核, 这次审核通过了. 贴图

贴图

在这个过程中, 我得到的教训是, 其实可以更早一些注册 steamworks 并发布商店页面, 因为商店和游戏审核至少要用掉 2 周,而商店发布后又需要等 2 周才能点发行, 所以提前 2 个月甚至 3 个月去做发行相关的事情是比较合理的, 这样就不会出现游戏做完了却无法点击发行的尴尬场景.

这样就可以了吗

游戏做到这一步, 我感觉已经差不多了, 但是在等待 steam 审核的时候, 我又写下了这样一段话:

从一个玩家的视角,如何去判断一个游戏是否好玩?
我觉得最重要的是有没有在游戏中体会到乐趣。
游戏玩家其实是一个特别容易讨好的人群,他会因为游戏中一些精巧的设计捧腹大笑,也会在看到一些新奇的很小的东西时感到开心。
并且游戏玩家富有同理心,他们对游戏的代入感特别强,你在游戏里讨好他,他心里清清楚楚并且很享受。
作为设计者,我们的游戏是对真实世界的拙劣的模仿和放大,在其中设定一些真实世界不常见甚至是完全不可能的事情。
我们在设计游戏的时候,需要迎合受众的寻求,增加相应的机制去满足玩家的心理需求,这些机制可以是以下几种形式:
1. 独一无二的特殊事件,通常以游戏主线或分支剧情的形式展开
2. 基于随机性过程和结果重复的循环事件,就像是钓鱼一样,你永远不知道今天自己会钓上来什么
3. 与真实世界形成反差的任何游戏设定,现实中越难得到的,在游戏中越容易得到,所以连欢乐豆都会有人喜欢攒
4. 与真实世界可以形成对照和代入的罕见事件,游玩过程中玩家并不具体期待某一件事情,但是永远在期待好的事情
5. 玩家需要轻微的挫折,人性都是如此,太容易得到的就不会珍惜,因此玩家在某个方面违反了设计者设定的机制时,便会在游戏中受到数值或其它方面上的惩罚

我又根据这些思考, 对游戏的部分剧情进行了补全, 尤其是恋爱事件, 因为我发现胡大胖特别痴迷于和美女们搞好关系.

这样, 等待发行的这段时间就也充分利用起来了.

最后的测试与直播

随着可发行日期越来越近, 在胡大胖还在疯狂测试的同时, 我决定录制一个游戏的游玩视频, 到时候进行 steam 循环直播, 因为我看了 steamwork 的文档, steam 是允许录播的, 前提是你在页面里有表明是录播(Replay).

在第一次录制这个游玩视频的时候, 中后期我自己又发现了一个不可原谅的 bug, 就是游戏中就职的公司可能会在发薪日不发工资给玩家!

所以只好又匆忙修复这个 bug, 然后我发现, 修复的这个 bug 解决了一些游戏中潜在的一些隐性问题.

这是一件很值得开心的事, 现在就发现 bug, 比玩家玩的时候发现 bug 要好, 作为一款低成本的剧情向独立游戏, 我知道玩家并不会给我第二次机会, 如果因为 bug 导致主线剧情无法正常游玩, 玩家虽然不至于退款, 但也不会再有兴趣打开游戏了.

然后我第二次开始录制游戏的游玩视频, 这次非常顺利, 录制完后我把游戏实机视频用 OBS 软件推流到 steam 直播, 并且循环播放, 很快我的 steam 商店页面就能看到我在直播了.

Steam 发行上线

2025 年 1 月 1 日零点, 我终于点下了游戏的发行按钮, 一切都画上了句号, 也许不圆满, 但我实现了一个梦想, 付出了很多, 但是在最后这一刻, 我深深地感到了自豪.

贴图

游戏首发第一天就收获了一条好评, 果然爱玩游戏的都是好人!

贴图

最后的最后

原本发行后, 如果没有 bug 需要修复, 做一个独立游戏这件事就应该画上句号了, 但我觉得应该把自己这些经历写出来, 给后来者一个参考, 也是给自己一个反思的机会.

于是见缝插针写了本文, 其中肯定有疏漏或错误的地方, 欢迎各位大侠指正.

最后, 祝大家都能做自己喜欢做的事!

贴图

有没有觉得“不以物喜,不以己悲”是句很扯淡的话

fly89: 你哪怕说一句“看开点”也成,道貌岸然的来一句“不以物喜,不以己悲”,感觉爹味极重。而且像是劝人成佛、出家为僧的感觉,总之不喜欢别人跟我说这句话,很扯淡。

我买了自己喜欢的东西,当然开心,买不起当然伤心。
自己的境遇不好了自然难过,看开点就是了,说“不以己悲”是不是有点过了。

要能达到这句话说的境地,那真是无欲无求了,无欲无求了人生还有什么乐趣呢。

看帖子突然也想分享个事情,大家评判下

SWALLOWW: 前几天晚上去山姆,我和我女朋友,人很多,开车去的,停车一直在找位置,

当时我的状况是:非常想拉屎,能忍但快到极限了。

停车一直在打圈,突然发现有一个车要走了,我女朋友让我在旁边等着,但是过道很小,后面车是通行不了的,当时后面没车。

然后一直在等那个车,后面来车了,开始闪我,我就只能往前开走了。

我女朋友就开始抱怨,为什么要给后车让,你让他等一会怎么了,大家不都这样吗?

我就说,咱们做事不能影响别人。

然后又转回原来位置,发现被人抢了。

她说:就你善良?大家都这样做,反正我不着急,你就慢慢转悠吧。




我觉得我做的是挺正常的一件事,她也有她的想法,但我觉得她不应该说我风凉话。那时候我挺难受的。

采用 Java 开发的 SSH/终端工具,希望大家给点建议

powersee:

为什么要做这个?

目前市面上大多数客户端都是基于 Electron 或 HTML 开发,我个人不太喜欢这种“塑料的感觉”(并不是贬义,缺乏真实触感的体验)。因此,我选择使用 Java Swing 开发一个桌面端客户端。

核心部分采用 Kotlin 开发,最终目标是通过 Kotlin Multiplatform 打造一款全平台的 SSH/终端 工具。

功能特色

  • 支持多标签页
  • 数据加密存储
  • 通过 Gist 同步配置
  • 宏功能
  • 密钥管理
  • Find Everywhere
  • ...

目前尚不支持 SFTP/FTP 等

XTerm 协议部分

使用 Kotlin 实现了 XTerm 协议(尚未完全实现)。桌面端的渲染层基于 Java Swing ,未来计划将这一部分迁移到 KMP ,从而实现真正的跨平台支持(包括移动端)。

在实现协议的过程中,参考了许多经典的客户端,例如:

预览


后续发展

  • 命令提示(这部分我还在构思,如何准确获取用户输入的命令?)
  • AI 功能
  • 增加团队协同功能
  • 支持 Telnet
  • 支持 X-Server
  • 支持 VNC Viewer
  • SFTP/FTP
  • 串口
  • ...

这是一个长期发展的项目。


希望大家给点建议 🙏

项目地址:https://github.com/TermoraDev/termora

显卡坏了,准备买个二手的

IurNusRay:

7 年前的台式机了,最近玩那个新出的游戏 [燕云十六声] ,可能是显存爆了,居然直接绿屏了,然后再也无法显示了。准备在京东上买个二手的网吧拆机卡 1080Ti, 不知道靠谱不。目前的主板是技嘉 AB350M gaming-3, CPU AMD R5 1500x, 然后考虑到电源功率可能不够,再整个 750W 的全模组电源,这配置应该匹配吧

PT 站的不可替代性是什么?

Byleth:

因为各种 PT 站总是很难注册,有层神秘的面纱,对于我这种从来没玩过的人来说非常好奇里面到底有什么东西

目前我对于影视的需求就是各种电影、电视剧,对于这种,感觉只是需要:

  1. 打开 rarbg(现在没了),pirate bay 之类的网站
  2. 搜索英文片名,找个清晰度高的,复制磁力链接
  3. 打开 115 网盘:添加链接任务 -> 开始下载

就完事了,99% 的影视资源,115 都能成功秒传到网盘,然后跑满家庭千兆带宽高速取回本地。之后刮削完打开 infuse 直接看就完事了。

如果是 PT 的话,还要费劲调试种子客户端,还要记得不能忘记下载完成后再上传一段时间避免被 PT 封号,还要预留一部分 NAS 的磁盘空间去存储 PT 上热门的资源,以及各种五花八门的规矩/守则等等,感觉麻烦很多啊?

难道是同一个电影,PT 站上有更高的清晰度?可我都已经从 pirate bay 下载到 4K REMUX 了,难道 PT 上有独家 8K 版本?

或者是有「冷门资源」?可是什么样的冷门资源呢?难道是类似上个世纪的古早电视剧、纪录片这种?这种感觉需求量应该也不会很大呀?

2025 年了,成人验光配镜的最好方式是什么?

V2April:

从小到大配眼镜的方式基本上都是,找一家线下的眼镜店,验光,配镜,选镜框,拿货走人。但是多年来的体验差距很大,有的配的没啥问题,有的就觉得质量很差。上次配的尤其差,戴了一年感觉度数提高了不少。之前听说有人在线下找眼镜店验光,拿到处方后给网店配镜。但感觉这样更没法信得过,并且白嫖线下店验光也有点说不过去。那么在 2025 年有什么更好的模式吗?

golang, 开发效率低执行效率高的语言?

iintothewind:

最近因为偶然的原因, 不得不用了一段时间的 go. 经过这一段时间的使用, 发现这门语言实在是有太多不爽的地方, 所以就在这里吐槽一下, 看看是不是因为我理解不对, 还是这就是 go 语言以及生态的缺陷.

语法表达力非常差

go 的控制流非常简单: for, if, else, switch and defer 就是全部了 当然, 你如果之前对计算机语言所有的认知都来自于命令范式的语言(比如 C), 这并没有什么, 甚至觉得够用了.

但是对于偏函数式风格的语言, 这简直太简陋了, 函数式的控制流不仅有 for, if-else, 对于 switch 来说有更加强大的 pattern-match, 对于 defer 这种玩意, 有更好 try-catch-finally 替代, 而且你想怎么写就怎么写. 而且支持 unit, filter, map, flatMap 等等统一的操作.

golang 控制流的简陋直接造成了 golang 的语法表达能力差. 解决同样的问题, 需要更多更长的代码, 就像当年不支持 Lambda 特性的 Java 一样.

我就奇怪了: Java 没有支持 Lambda 以前, 人人骂 Java 代码啰嗦, 写起来累人, 到了 golang 了这么差的语法表达力, 怎么就成了简单清爽?

简陋敷衍的容错处理(Error Handling)

我接触到其它语言在写后端业务逻辑是, 对于 public 方法的入参是采取完全不信任的态度的. 原因很简单, 传进来的值在运行时存在非常多的可能, 最典型的就是 null 值一定要处理. 如果存在 a.b.c.d 等这样取值方式, 恐怕要不得不采用 Option 一层层去拿. 我可以理解有人说 Option 麻烦, 不管你用什么方式, 至少判空的逻辑是少不了的.

但是, Golang 是没有 Option 和 Try 的, golang 甚至连三元表达式都没有, 所以一般 Golang 是这样做的:

if a == nil { return nil, someError("...") }

b, err := a.b

if(err != nil) { return nil, someError("...") }

后面一大长串的 if(err != nil).......

如果你天天是写这样的代码, 你觉得这叫简洁?

少到寒酸的集合类型以及集合操作

其实 golang 的集合就只有个 array 和 map.

还有人说 array 的 slice 支持操作很方便啊? 我劝你醒醒, 看看其它语言吧, 就这几个操作哪个语言不支持啊?

Go 默认集合类型就是可变的, 所以所有对集合的操作, 实际上是修改集合自身. Go 是没有不可变集合这个概念的.

嗯, 找了找居然有人写了类似于 Linq 的 go-linq, 但是你看看相同的操作, go 得写多少代码吧, 而且每个操作结束时输出的变量居然时实现声明好再传进去的, 连直接输出到一个不可变集合的能力都没有.

蛋疼的数据库处理

其实我认为 Java 的数据库处理已经够老旧了. JDBC 标准已经很久没更新了, 而且很可能也不再更新了, 之前很多人期待的原生异步处理能力很可能不会再有了. Java 比较流行的 ORM 框架, hibernate 和 MyBatis 也已经非常老了, 老到都没办法在多线程环境下正常运行, 因为 Context 默认是单线程环境的. 但就这么老的 ORM 框架, 或许没办法跟.Net 的 linq 处理效率比一比, 但跟 Go 比起来也是好太多了.

来来来, Go 现在访问数据库, 有好的 ORM 框架吗? 有一个 sqlc 代码生成器, 大家已经觉得好太多了, 比自己写实在是快多了, 怎么不骂 Go 的数据库处理低效了, 就这??? 连个像样的 ORM 框架都没有.

鸡肋的泛型系统

Go 有泛型, 但又不支持方法级别的泛型.

Go 也没有泛型型变的概念.

所以你在接口上做一定程度的抽象, 绑定更多操作, 生成新的类型的实例是做不到的.

总结

Golang 其实真的只是一个 Better C 的定位, 当然这还是在开发效率上来说的, 就是仅仅** Better-Than-C **. 但 Golang 这简陋的语法, 相对于其它非常多的现代语言来讲, 还是差的很多的.

可能 Go 语言的那几个掌舵人就是典型的命令范式计算机语言的拥趸, "嗯, 我们可绝不会加入任何函数式的特性, 这会增加这个语言的复杂度, 降低编译速度, 让语言不纯粹...."

您说您的, 但是 Go 写写底层就好了, 毕竟比 C 好. C 可是连数据类型概念都没有, 从来只操作内存的.

现在结构体都允许写接收方法了, 也能写点泛型了, 内存都帮你回收了, 你还想怎样?

什么? 你说用 Go 写业务逻辑很痛苦???

谁让你用 Go 写业务逻辑了, 跟你说了别去跟那帮写 Java 的混一起, 他们就只会 spring, 除了 spring 啥都不会.

2025, 留下你最近的烦恼吧

LouisGuo: 亚里士多德:理性的人寻求的不是快乐,而是没有痛苦。

    假如我们整个身体健康无恙,但只有一处地方受伤或者疼痛,那我们身体的整体健康就不会进入我们的意识里。我们的注意力始终集中在那微小的疼痛之处。同样,违反我们意愿的事情,即使是微不足道的,但这不如意就会进入我们头脑,我们就会惦记这件事情。
    所以,判断一个人现在是否幸福,去问问他最近烦恼的事情把,看看事情是多么渺小,你就知道你现在有多幸福了。在很不幸地时候,那些微小的事情,你是感受不到的。

写下大家最近的烦恼吧

你小时候读过读者文摘吗

movq:

小学的时候家长不让玩电脑,就喜欢看读者文摘这样的杂志。杂志的内容很丰富,既有新闻,又有一些笑话、艺术插图、摄影作品。

长大后发现很多人认为读者文摘这样的杂志只是鸡汤,不建议阅读

随着互联网的无孔不入,现在网络上的内容已经变得很无聊,比如刷抖音刷成了只会上下滑动的大猩猩

互联网只是技术在不断变更,内容却越来越傻。小时候抱着读者文摘读,反而很充实

像这种周刊杂志,在目前这个快节奏的社会,应该很难生存吧。也算是劣币驱逐良币了。

不知道现在有什么类似这种书的读物、网络上的网站

如果只是刷 v2 这种技术论坛,也很是无聊,得不到心灵上的放松和舒适,毕竟人不想下班后继续讨论技术,也不想同质化的内容刷个不停。

2025 年了,安卓换机怎么选

UTC0700: 认准了 8 elite ,之前是一加刷了 lineageos ,现在开始性能开始不能满足使用,速度慢下来了,他们家的 color 和 oxygen 都不是类原生了(卸载个自带 app 都费劲),看之前发布的几代机子也没有啥三方系统;小米解锁都难,更不用想;其他 OPPO 和 vivo 感觉也是一样的。本来想着要不三星或者 pixel ,那也要等段到二月以及下半年了,还不知道 pixel 的处理器今年咋样,另外三星好久没用过了,oneui 怎么样,以及国行和海外版如何选择,怎么买划算,用哪个版本。
❌