Theseus 模组文档
API 参考 / 打击特效样式(render 包)

TextStyle


用途:文本样式,供 RenderCanvas#drawText 与 RenderCanvas#measureText 使用。宿主用随包的位图/矢量字形渲染,size() 与对齐方式在不同字体路径下表现略有差异(见下)。

方法速览

方法用途
fontType()字体类型:NORMAL / BOLD / PROPORTIONAL
size()字号(像素)
color()文本颜色
alignment()对齐方式,决定 drawText 的 x 语义
of(double, Color)快捷构造:NORMAL + 左对齐
of(FontType, double, Color, TextAlignment)完整构造

完整签名

java
public interface TextStyle {

    FontType fontType();

    double size();

    Color color();

    TextAlignment alignment();

    enum FontType {
        NORMAL,
        BOLD,
        PROPORTIONAL
    }

    enum TextAlignment {
        LEFT,
        CENTER,
        RIGHT
    }

    static TextStyle of(double size, Color color);

    static TextStyle of(FontType fontType, double size, Color color, TextAlignment alignment);
}

fontType()

签名:

java
FontType fontType();

行为:字体类型,null 按 NORMAL 处理。

size()

签名:

java
double size();

行为:建议字号(像素)。仅 BOLD / PROPORTIONAL 路径生效(取整后至少 1px);NORMAL 路径固定 16px。为了像素稳定,宿主在一次 drawText 之后会把字号复位,不会污染后续绘制。

color()

签名:

java
Color color();

行为:文本颜色(java.awt.Color,含 alpha)。为 null 时退回当前绘制色(RenderCanvas#setColor 设置的颜色)。

alignment()

签名:

java
TextAlignment alignment();

行为:决定 drawText(text, x, y, style) 中 x 的含义:LEFT 为文本左缘、CENTER 为水平中心、RIGHT 为右缘。宿主按 measureText 同口径的宽度做偏移,因此对齐结果与测量值一致。y 始终是文本基线附近的绘制起点,不随对齐方式变化。null 按 LEFT 处理。

of(double size, Color color)

签名:

java
static TextStyle of(double size, Color color);

行为:等价于 of(FontType.NORMAL, size, color, TextAlignment.LEFT)。因为 NORMAL 固定 16px,该方法实际效果与 size 无关;想要按字号放大文字请用 BOLD 或 PROPORTIONAL。

of(FontType fontType, double size, Color color, TextAlignment alignment)

签名:

java
static TextStyle of(FontType fontType, double size, Color color, TextAlignment alignment);

行为:构造完整样式,返回不可变实例,可反复复用。

示例:居中绘制标题与按字号放大

java
// 小字:等宽字形固定 16px,默认左对齐
TextStyle small = TextStyle.of(16, java.awt.Color.WHITE);
canvas.drawText("COMBO 128", x, y, small);

// 标题:比例字形 28px、水平居中(对齐方式决定 x 是中心点)
TextStyle title = TextStyle.of(TextStyle.FontType.PROPORTIONAL, 28,
        java.awt.Color.WHITE, TextStyle.TextAlignment.CENTER);
canvas.drawText("RESULT", centerX, y, title);

// 先量再排版:把副标题放在标题上方
TextMetrics m = canvas.measureText("RESULT", title);
canvas.drawText("成绩结算", centerX, y - m.height(), small);