Skip to content

方块和实体

在上一章,我们刻意地回避了一个问题————什么叫一个方块?一个方块肯定不能代表在世界(World)中仅一个建筑(Building),假如我们真的每一个建筑都要自己声明,那该有多么的麻烦?

从这一节开始,我们终于要写真正的代码了。这时,我们首先就要区分方块建筑。不过,首先我们要复习Java中一个基本的知识点。

多态

多态是指同一操作或方法在不同的对象上有不同的行为。它使得程序能够使用同样的接口来处理不同的对象,从而提高了代码的可扩展性和可维护性。要实现多态,以下三大条件缺一不可:
1.必须在继承体系下
2.子类必须要对父类中方法进行重写
3.通过父类的引用调用重写的方法

多态是Mindustry模组的核心,也是Mindustry模组开发几乎唯一的方式。之所以这样说,是因为其他游戏有着几乎完全不同的开发方式。有的游戏模组是事件驱动的,即通过监听原版某一行为而做出一些反应,典型如《半条命2》,在Mindustry中服务器开发也常用这一范式,但是Mindustry孱弱的事件系统无法支撑模组所有功能的开发;也有的模组高度依赖于Mixin,即直接修改游戏的代码,插入自己的功能,典型如Minecraft。

不过,这三种开发方式并非全部方式,仅为笔者一面之词,并且也都是相互渗透的。在这里只是强调,在Mindustry模组的开发中,不是你把你的代码交给游戏,而是游戏去主动找你的代码

具体说来,我们还是要从多态的三大条件入手,分析多态的作用。

继承体系

在上一章,我们已经初步了解了原版内容的继承树,也通过Java知识的学习,明白了子类拥有父类的一切字段,并且在功能上有派生关系,Content是所有内容的基类,类中包括了id这样最基本的字段。

方法重写@Override

然而,真正让不同的类有不同行为的,恰恰是那些被重写的方法。

比如,不同的方块,会根据自己希望给玩家展示的内容,在统计信息界面显示不同的信息:

//TODO 图图

例如,最基本的方块只在统计信息中显示“用途”和”基础“,而电池就会