渲染位置栅格
基本信息
| 属性 | 值 |
|---|---|
| 枚举类 | alexiil.mods.load.json.EPosition |
| 取值数 | 9(3×3 栅格) |
| 字段 | private final int x, y;(取 -1 / 0 / 1) |
枚举值
| 值 | x 系数 | y 系数 | 行为 |
|---|---|---|---|
TOP_LEFT |
-1 | -1 | 原点对齐左上角 |
TOP_CENTER |
0 | -1 | 水平居中 |
TOP_RIGHT |
1 | -1 | 靠右 |
CENTER_LEFT |
-1 | 0 | 垂直居中,靠左 |
CENTER |
0 | 0 | 屏幕中心 |
CENTER_RIGHT |
1 | 0 | 垂直居中,靠右 |
BOTTOM_LEFT |
-1 | 1 | 靠左下角 |
BOTTOM_CENTER |
0 | 1 | 水平居中,靠下 |
BOTTOM_RIGHT |
1 | 1 | 右下角 |
变换规则
transformX(x, screenWidth) / transformY(y, screenHeight) 调用 transform(coefficient, coord, screenThing):
| coefficient | 返回值 |
|---|---|
| -1 | coord(使用原始坐标) |
| 0 | screenThing / 2 - coord(中心对齐) |
| 1 | screenThing - coord(靠右/靠下) |
非 -1/0/1 时抛 Error(枚举不可能出现,但防御性检查)。
ImageRender 适配
public int transformX(int screenWidth) {
if (position == null || positionType == null) return 0;
int trueX = position.width;
if (trueX == 0) trueX = screenWidth; // width=0 时按全屏处理
return positionType.transformX(position.x, screenWidth - trueX);
}
transformX输入screenWidth - trueX,因此positionType=TOP_LEFT, position.x=10, trueX=300→ 10 像素处开始绘制。transformY直接用screenHeight - position.height,配合positionType系数把 9 宫对齐转化为像素坐标。
使用场景
ImageRender.positionType:每个渲染元素的锚点。MinecraftDisplayer.baseTipsTextPos(默认"BOTTOM_CENTER"):tip 文本的基础锚点(注释明确"其它元素固定用 CENTER")。