用户:MashKJo/1.12.2模组开发教程/11.高级物品和方块 - 前置概念:修订间差异

→‎AxisAlignedBB:​ // Edit via Wikiplus
→‎ActionResult<T>:​ // Edit via Wikiplus
→‎AxisAlignedBB:​ // Edit via Wikiplus
 
== AxisAlignedBB ==
AxisAlignedBB,全称AxisAlignedBoundingBox,简称AABB。这个类描述的是一个长宽高都确定的长方体——在实际应用中用于指定某个方块的碰撞箱,以及鼠标指向某方块时产生的勾选框。这个类下有许多运算用方法,如取交集(intersect)、取并集(union),但实际上这里的取交集和取并集并不等同于数学意义上的交集与并集,具体是怎样的读者去看看它们的具体实现就好了,简单来说这两个方法都返回一个AxisAlignedBB,然而空间中两个长宽高都平行于坐标轴的长方体,其并出来的新的几何图形可不一定是一个标准的长方体,所以这两个方法实际上意义不大了。
 
但实际上,Block类中用于获取碰撞箱的方法,返回值类型就是AxisAlignedBB,这是不是意味着我们的方块的碰撞箱只能是一个长方体了?实际上并不是,我们可以通过覆写<code>addCollisionBoxToList</code>来实现,具体操作为向一个List<AxisAlignedBB>中添加新元素,这就很简单了。
 
顺带一提,似乎Block类下几乎所有和碰撞箱有关的方法都被打上了@Deprecated注解,读者对此不要感到有疑虑,放心大胆地用即可。有的时候不要在乎这个@Deprecated,毕竟Block类下的<code>getStateFromMeta</code>和<code>getMetaFromState</code>都被@Deprecated了——你总不能不覆写这两个方法吧?不覆写的话,注册多BlockState方块就会崩游戏了。实际上这都是因为Mojang即将在1.13大改这些类和相关方法,你一般会看到Forge对此写的一些注释如“to be removed in 1.13”,可问题是我们现在是在写1.12的模组,所以有的时候这些@Deprecated也挺让人不知所谓的。
 
== BlockPos ==
行政员、​优秀编辑者、​界面管理员、​监督员、​管理员、​小部件编辑者
3,351

个编辑