最后更新于 .

哦,不要想歪了,这里说的屁股,是“屁股决定脑袋”里的屁股。
觉得不好听的话,可以翻译成:立场决定观点。

其实我们都是自己屁股的代言人。

不过,我从来也没觉得这个是不好的事情。
作为一家公司,一个集体,我们是多元化的,只有其中的每一个个体都为自己发声,整体才会达到一个动态的平衡。

当然,我还是说清楚的是,这里表达的是争取自己的利益,而非打压别人。

前段时间在脉脉上逛的比较多,不知道是脉脉氛围组,还是大家的认知真的如此,很多言论让人觉得无法理喻。

凡是努力工作的,都是工贼;凡是批评下属的,全是Pua;凡是规划未来的,都是画饼。

我知道大家最近都在反内卷、反pua。
但是否有些矫枉过正了呢?

说出这些话的人,或许并没有意识到一个问题,就是总有一天,他自己也可能会成为领导,自己有一天也可能为团队规划未来。

也可能,这些人是知道的。

只是屁股坐在了当前的位置上,所以就让屁股完全的决定了脑袋。

因为自己是团队绩效不好的人,所以就讽刺那些想要努力工作获得成绩的人。
因为自己是被批评的人,所以无论是否是自己的原因,都归咎于领导和外部原因。
因为自己对于未来没有规划,所以对所有的未来规划,都认为是画饼。

我不是说所有情况都是如此,我只是提出一个假说,一种可能。

我们真的要成为屁股的代言人吗 ...

最后更新于 .

内卷这个词,现在在国内应该算是非常火了。
然而,最近对于某些被内卷修饰的案例,我总是隐隐约约觉得哪里不太对,但是又不太肯定。

所以,我这几天研究了下内卷这个词的由来,最终在维基百科上找到了比较靠谱的答案:内卷化

这里将定义摘抄如下:

内卷化(英语:Involution)是一个社会学概念,也翻译为过密化,用以形容社会文化重复劳作、发展迟缓。内卷化出自拉丁语词汇“involutum”,原意是“转或卷起来”,因德国哲学家伊曼努尔·康德、美国人类学家亞歷山大·古登威澤爾、美国社会学家克利福德·格爾茨等人的使用而闻名。格爾茨的内卷化概念借由印度裔汉学家杜赞奇、华裔历史学家黄宗智等人的使用引入中国农村研究,在中国学界引起争议,内卷化概念现今是中国学界影响较广、提及频率较高的概念之一。

虽然有定义,但是理解起来还是一头雾水。
所以推荐大家有时间还是去看下维基百科下面的具体案例,尤其是关于“毛利人的装饰”的案例,理解起来会容易很多。

这里,我仅谈谈目前国内所指的内卷。

我以为:内卷,指的是未产生额外整体价值的竞争。

举一个大家耳熟能详的例子:

茴字的三种写法。
原本,茴字一种写法足矣;但如果一个组织的所有人都不得不去学习茴字的三种写法,但却并没有额外的作用,那么,此时的现象,就是内卷。

什么叫做未产生额外整体价值呢?
即多学会两种写法,并没有使得组织的效率或者质量产生任何提升。因此站在整体上来看,这样的竞争属于内耗,是有害无利的。

那么是否可以说是完全没有价值呢?
也不能这么绝对 ...

最后更新于 .

其实想写这篇文章也是很久了,只是每次都犹犹豫豫不肯着手。
一是看这博客的不少人也是现实中的朋友,像以前创业时的口无遮拦肯定不行;二是太长时间没写,想说的太多,反而不知道从何说起。

以前听人说,互联网是有记忆的,你做的所有事情,都会在互联网上的一个角落里被记录下来,无法消灭。
又有人说,互联网是没有记忆,你所努力的、付出的、尝试留下痕迹的,最后一样都不会留下,像从来都没有存在过一样。

我去看了下和这博客当年同时期的其他博客:emacser.cn 关了;善用佳软6年没更新了,22年居然突然更新了一下。
想起当年博客大行其道的时候,想起emacs和vim的信徒们唇枪舌剑的时候,还是有会有些感慨时过境迁。

当然,也有没有被时间改变,反而变得更加精炼的东西。
比如自己一直在用的Vim。

如果说在当今时代,作为一线开发用Vim还算是比较正常的话,基本都是管理工作却还在用Vim的,恐怕确实没有几个人了。

以前用Vim写代码,现在用Vim写markdown,配合livereload,倒也是惬意的很。
不过偶尔还是要写写代码,毕竟核心技能不能丢嘛,哈哈。

说回自己吧。

其实从上篇博客之后不久,我就放弃创业了。
回了大公司,回到打工人的身份。

现在回想起来,创业固然是需要坚持的,但是及时止损也不失为一种选择。

创业这8年多,有小小的成功过,也有后来的跌倒。
其实自己是蛮感激这第二段创业经历的 ...

最后更新于 .

文章的标题不是我最早说的。
而是一个视频底下一大批游戏创作者们的心声。

那个视频,是 《黑神话:悟空》

当时看到这个视频的时候,我感动的热泪盈眶。
一方面,感叹于终于有人要做中国自己的3A游戏了。
一方面,也在叹息,那个人,终于也不是我。

这也是创业以来我第一次深深的自我怀疑:自己在做的这些游戏,算什么?

《矩阵危机》算是自己真正想做的游戏,实时多人对战,帧同步服务器,确定性物理引擎,随机地图。1年多的时间,我们也确实投入了很多。
然而,当市场验证结果不理想的时候,当我们发现方向出现问题的时候,我们只能选择更改方向。

给腾讯天美做外包,做h5小游戏上国内几大平台,现在又在做海外超休闲小游戏。

这些,真的是我当年出来创业的初衷么?

其实落差真的是挺大的。

不过能怎样呢?不是每个人都有机会去做那些光鲜无比的事情,即使我自己都看不上的超休闲游戏和其广告变现形式,我们也要承认很多厂商在海外赚的盆满钵满。

正经赚钱的生意,不丢人。

说起来,前段时间买量的数据倒是还不错,算是对我入门广告投放1个月的奖励吧~截图是美国区的。

不过Google Play最近把我们的应用给下架了,说是有windows恶意程序,我寻思一个apk里面即使有windows恶意软件也运行不了啊?
最近正在申诉,希望能尽快有结果吧,实在不行只能注册新的应用ID了。

而且比较恶心的一点是,一旦Google Play上被下架 ...

最后更新于 .

!!!本文含有《最后生还者2》剧透

记录一下最近的几个游戏吧,也顺便分享一下感受。

一. 《健身环大冒险》通关

先贴几张通关截图。

从今年2月份开始锻炼,一开始因为疫情在家办公,所以保持每天锻炼一次的频率,后来恢复上班后,保持两天一次的频率。

到7月24号完全通关,总共瘦了15KG。

极其推荐给想要锻炼身体的朋友。

二. 《最后生还者2》通关

这一代网上差评很多,虽然我对结局也有些抵触,但也还勉强能够接受。

且不说埃比中途放过艾莉一次(如果算上开头那次应该是两次)的原因,如果艾莉最终真的选择杀死埃比,那么要不要把勒弗一起杀死?

如果选择杀死的话确实可以永诀后患,但是埃比尚且知道放过无辜的人,如果艾莉反而杀死了无辜的勒弗,那不是艾莉比埃比更加残忍?

如果选择不杀的话,那么这场循环往复的复仇又什么时候能够终止?

更何况艾莉也开始有了自己的孩子,乔尔能够为了艾莉放弃全人类,那么艾莉能为了孩子做到什么呢?

但我也能理解很大一部分低分玩家的情绪,尤其对于和我一样有着一代感情的玩家来说,确实对于这样的结局是难以接受的。

乔尔的死,杰西的死,一个刚刚还活蹦乱跳的人,突然就在你眼前一动不动了。

你痛苦,你愤怒,你想复仇。

但偏偏,制作组让你去控制埃比,让你去体验埃比的痛苦,她又何尝不是失去了父亲,曼尼,欧文?

我印象最深刻的一点是曼尼死的那一段,当我看到曼尼死在面前 ...

最后更新于 .

发现想抽时间写博客实在是太难了,不过我觉得今天这一篇还是很值得写一下的。

熟悉我的同学应该都知道,我之前做了一款《矩阵危机》的产品,使用的是帧同步的技术。

简单画一下V1架构图:

  • Gateway

    网关服务器。

    负责客户端连接的接入,使用协议TCP。

    使用C++编写。

  • KcpProxy

    Kcp协议的代理服务器。

    客户端默认使用Kcp连接服务器,如果失败会自动回退到Tcp。

    使用C++编写。

  • RoomServer

    房间服务器。运行战斗逻辑,每个房间同时仅能运行一场战斗,帧率为15帧/秒。

    房间服务器与Gateway间通过Tcp连接,每个房间建立一个一条独立的连接。

    使用Python编写。

整个架构还是比较清晰的,但是里面有个极大的问题:性能

因为python的性能实在是太差了,对于RoomServer每秒15帧这种cpu密集型的业务场景完全不适合。

至于python的性能有多差,我当时做过一个简单的测试,同样的业务代码,c++是python性能的10倍左右。

可能直接说这个数字大家也没什么感觉,但是要知道换算成服务器的话,那就是10倍的服务器量,10倍的成本。

所以这也是要做架构升级的原因。

而升级的方案也有多种,其中一个方案如下:

其核心逻辑是将CPU密集的RoomServer放到Gateway中去,而额外多出来一组RoomController负责对Gateway和Room进行控制。

RoomController可以继续使用python实现。

这样的方案虽然解决了性能问题,但是却导致gateway的功能过于耦合,不是好的设计方案。

还有一个方案就是将RoomServer直接使用C++重写,每个Room开一个线程 ...

最后更新于 .

发现每天的想法都很多,积极的,消极的。
但是当想要付诸纸笔的时候,却又不知从何说起。

所以这篇博客就当作碎碎念吧,想到哪就写到哪。

一. 生命的意义

最近经常在思考人生的意义,以前我觉得,人类可能是被圈养的,有人在一直观察着我们;或者可能是我们其实都是虚拟世界里面的角色,有人在操控着我们。
但最近我开始悲观的觉得,可能没有任何人在意我们。

文章的标题是《不如蝼蚁》,因为蝼蚁之于人类有时候还算是有趣的存在,毕竟我4岁的儿子有时候还是会饶有兴趣的看蚂蚁半天(当然我小时候也这样)。

而人类,甚至于生命这个整体,可能都是无人在意的。

当然,我作为生命中的一个独立个体,肯定是无法理解生命本身的意义的。

如果看过《失控》应该能理解我说的这句话,水滴是很难理解大海的。
水滴汇集成大海之后已经完全变成了不一样的东西,哪怕大海确实是无数的水滴。

所以,无论是我,以至于生命中的任何一个个体,都应该是无法理解生命本身的意义的。

但如果《失控》里说的是正确的话,那么有一条是可以确定的,生命是希望无限扩张的。

从海洋到陆地,从地球到太空。

而想要实现这一切的基石,是繁衍。

基于此结论,我之前产生了一个很奇怪的想法。那就是:

我生育了下一代,对于整个生命来说,是有意义的。

我觉得,对于大部分人来说 ...

最后更新于 .

是的,前一篇文章也说了,《矩阵危机》的版号被打回了。

为了团队的生存,暂时只能转去做外包了。

其实早在一年半之前,tam就跟我聊过,想做自研的同时边做着外包供血的事情。
只是当年自己心高气傲,说是专注于自研不要被其他事情干扰,其实也是烦外包的甲方太麻烦。

而今天《矩阵危机》的失利,我不得不对自己的产品和运营能力上打个X。
自信是对的,但自负是错的。

所以现在之所以愿意做外包,有几个原因吧。

  1. 训练团队。通过外包来储备自己的人才。
  2. 储备资金。一直烧自己的钱也不是办法,现在的资本也都不傻,游戏行业的资本退出又比较困难,所以对于游戏并不是特别看好,还是要能自己供血。
  3. 找到互补的合伙人。
  4. 等着自己真正准备好。

具体说说这次的外包项目吧,说实话作为第一个外包项目,直接就和大厂合作实在是累的够呛。

这次的项目要求的是帧同步对战,好处是他们提供服务器,我们只需要编写客户端就好了。
但偏偏这游戏是个多人实时对撞的游戏,所以对于物理模拟/手感的要求都比较高。

本来我是不打算过多参与这个项目的,所以让手下一个小孩自己写了半个月。因为需要用到物理引擎,但是又没有现成的定点数物理引擎,所以就用box2d+数据对齐来尝试解决,结果搞得一团糟。

最后甲方那边也急了,没办法,只能自己上了。

从当天9点写到次日凌晨7点,总算是把确定性碰撞库给搞定了。

之后又花了几天做成物理引擎,并且优化了手感。

好在之前有《矩阵危机 ...

最后更新于 .

前天,版号的代办公司在群里毫无征兆的发了这么一条消息。

那一瞬间,我其实有点懵,似乎还没有意识到这对我意味着什么,对《矩阵危机》意味着这什么。
旁边的同事还在有节奏的敲打着键盘,间歇的几句讨论,一切看起来都还在正常的运作。
我该怎么回应,怎么面对,我不知道。
我只能凭借本能,友好的感谢了为我们代办的公司,并期望下一次合作。

直到过了两天,我才终于能正常的思考这件事情。

是我的错。

事情的起因,是因为总局的审核人员发现了我们游戏在线上运营。

我说一下我们的实际情况吧

  1. IOS

    • 上线:上线AppStore
    • 支付:开通
    • 广告:开通
  2. Android

    • 上线:仅在TapTap和阿里积木计划开放测试
    • 支付:关闭
    • 广告:开通

而因为版号等待期间,我们基本没做任何推广,所以所有收入加起来不足500元。

所以整个事件的过程就是:

  1. 总局发现我们有上线运营,责令修改。
  2. 我们写收入证明,保证书,下架所有平台。
  3. 总局审核不通过,驳回版号申请。

我为什么说是我的错?
因为错在对规则不熟悉。
但凡我对这个行业再熟悉那么一点点,就不会犯下这个错误。

那版号打回对游戏的影响是什么呢?

  1. 游戏无法上线国内所有平台
  2. 国内无法签发行团队 ...

最后更新于 .

本来下午一直在纠结用什么设计关卡地图的事,中间还考虑过使用excel,但是发现很难用。后来美术随口说了一句,用瓦片地图怎样?我说那个只能固定格子来排列吧,他说可以不用的。我这才去试了一下,果然可以。

Tiled 有如下几个很方便的功能,跟大家分享一下。

  1. 对象层创建的对象,位置是可以不严格按照格子来定位的。

    这里有几种选择:

    1. 将地图的属性中的格子大小调小。比如我们认为1米对应100像素,那么一个1.8米的人就是180像素高。

      如果我们认为对齐的精度只要到10像素即可,那么就可以将格子大小调整为10x10。

      之后选择 视图 -> 捕获 -> 对齐网格,或者移动对象的时候按住ctrl,就可以实现对象位置自动对齐网格了。

    2. 就是希望自由定义位置,那就什么也不用改。

  2. 对象支持类型以及属性

    这样对编程就非常方便了,代码可以通过对象不同的type来区分大类,之后再以对象name来区分小类,然后再通过属性获取具体的数据。

    对地图编辑也非常友好,因为不同的类型可以设置不同的颜色,这样编辑的时候就非常清晰了。

    值得一提的是,对象类型是不绑定在单个地图上的,所以如果需要创建多个地图的话,是可以公用对象类型的。

  3. 对象支持模板

    这个也是对于编辑多张地图非常重要的事,非常幸运的事,tiled支持了它。

    1. 首先要在 视图->视图和工具栏->模板 这里打开模板。
    2. 之后随便创建一个对象,比如一个hero。再其上点击鼠标右键,选择保存为模板hero.tx ...