====== 简易方块 ======
在上一章中我们讲到了享元模式,它就是在不同的对象中把相同的部分提取出来,这个过程叫做**抽象**。
作为一个**方块**,共有的属性可能有大小、生命值、类别、建造消耗等等。另外,还有一个东西叫做**方块实体,也就是每一个具体的、存在于游戏当中的方块**,它们拥有各自的生命值、消耗器、产出、进度等等。
===== 方块的注册 =====
和上篇教程类似,我们需要先创建一个继承于ContentList的类,我们把它命名为ModBlocks。接下来,在我们的load方法里声明一个静态字段用于存放方块。不要忘记在主类中实例化和调用load方法。
接下来,我们来创造一个方块——铁墙:
public class ModBlocks implements ContentList {
public static Wall ironWall; //这里我们先声明他为一个静态字段
@Override
public void load() {
ironWall = new Wall("iron-wall");//再次注册并赋值
}
}
然后我们就可以搞贴图和本地化了。
接下来,我们需要给他添加一点字段来增加功能,如果写过json或js对这些字段一定不陌生,java中字段的添加方式如下:
ironWall = new Wall("iron-wall") {{
requirements(Category.defense, BuildVisibility.shown, new ItemStack[]{});
health = 2880;
size = 2;
}};
你看明白了吗?
这里给一点投机取巧的指导:
* 在new后面紧跟着的,就是我们想要创建的方块的**类型**,类型是很重要的东西,一个类型会自带方法和字段,如果你选择的类型里没有你使用的字段,就会报错,一般我们需要以需求选择正确的类型;
* 在我们注册语句之后紧跟{{}},并在最里层填入赋值语句,这种创建实例的方法,我们把它称为**匿名类**;
* 里面的变量名和json/js几乎完全一致,你可以查看本站的[[modding:type|API指南]]查看,也可以直接看源码,二者没有任何差别,//冷知识,在IJ中,将光标移至类名上,ctrl+左键,就会直接跳到类的定义//;
* 要注意字段的类型,不要赋一个不同类型的值,例如,你不太可能把int赋值给string,但要记住float末尾一定要带上f;
* 要注意一些字段的json和java内容不同,例如requirements在java不只是物品堆栈,而是一个有三个参数的函数,分别为类别,建造可视性和物品堆栈。
没出错的话,打包之后应该就能看到了。
===== 进阶! =====
用java的意义是什么?当然是达到这个游戏最高的自由度了!如果你只是给方块写几个字段就完毕了,建议回去用json,还能搞到iOS兼容性,岂不美哉?当然,你未必要按我的走,顺从的你想法,一切都只局限于你能否把想法变成现实。
如果你还不会,务必要记住记住:**多看 多想 多写**
==== 看看排版 ====
任何人记住,在你看到这篇教程之后的五天我就会回来更新,注意,要以你看到这句话的时间为准!我半句假话没有!