你好,我在开发游戏的一个系统部分时遇到了困难,虽然我认为自己找到了这个问题的解决方法,我却因为担心自己的代码太复杂而陷入了焦虑循环。

重要的是要注意,我患有OCD,OCD带来了许多症状,其中包括一个强烈的毒性完美主义倾向:99% 的编码经验都是我写的被我认为是最差的代码。通常情况下,我会简单地把它视为一个烦人的问题,但在这种情况下,我可以察觉到有部分自我批评是合理的,但我完全无法判断是如何多,OCD是需要帮助的。

有时我觉得我做的事已经非常复杂到需要从头开始重新做了,但有时它们又不太需要这么复杂。之前我由于这个原因多次重新开始项目,我不想再重新开始一次。

问题的核心是,我在不同阶段开发了这个游戏。武器系统等基本系统的代码是根据不同的设计模式编写的,即使用设计模式(在大学期间学习)而无从反驳它们的存在。事实上,我的前半部分的代码都重新组织过或被删除,因为我使用了设计模式过多。

武器系统在我眼中是一个棘手的问题,结构如下:

  • 基础武器类,持有一个引用,这个引用指向武器属于的那个物品以及持有这个武器的玩家 Weapon每一发攻击都有 Primary 和 Secondary Attack,每一发攻击都或许会是hitscan,子弹发射基于效果或执行一个体积扫描,因为武器在击发时可能会共享相似的逻辑,但也希望可以体现它们之间的小差异,我决定将武器的击发逻辑传到了另外一层框架中:FirFrameWork 通过FireClass的实现,我们有了一个软件工程的抽象化:一个包含了基本逻辑的抽象父类以及一个包含各种特殊的实现的具体类。还有一个装饰抽象类,用于在攻击的逻辑上添加一些额外的效果。这确实是存在的,例如,装饰类可以为不同的类型攻击添加一种不同攻击动态效果,例如,一发子弹将在一个几何形状中依次击发。
  • Weapon引用了fireClass的实例,当weapon需要进行击发时它会对fireClass的实例发起call请求。

我的恶性循环爆发发生在尝试实现一个击发粒子效果的机制时,我不知道如何去处理和哪些对象应该在击发事件发生时检测是否与某个对象发生了冲突,我决定在“子弹系统”中定义一个粒子效果的逻辑,然后将其保存在“子弹系统”中然后在武器中给它添加一种保存方式,并将引用和“子弹系统”都传给fireFrame和需要的子弹。

因为我在思考过程中花了一段时间,所以我突然立即想把所有问题都归结于我设计得太复杂,所以决定重写或者重新编写系统。

然而现在我感觉好些了,但是我还是无法断定我的这个担心是不是合理的,可能我真的设计得太过于复杂了,但是我们又不知道确切到什么程度才是“过头”了。这就是为什么我会反复询问这个问题的原因:在这份文档中有许多经验丰富的人可能会告诉我:我是完全是错误的还是是过度担心的么?