Theseus 模组文档
API 参考 / 渲染、资源与语言

RenderCanvas


用途:模组唯一允许的绘制入口。所有绘制都走它,不接触任何平台图形 API;颜色由宿主在实现内部转换。

方法速览

方法用途
fillRect / drawRect / drawLine / fillTriangle几何图元(实心填充 / 1px 描边)
setColor(Color)设置填充与描边颜色
setAlpha(double)设置全局透明度(0-1)
clip(x, y, w, h)局部空间裁剪
save() / restore()状态栈
translate / scale / rotate变换
drawText / measureText文本绘制与度量
drawImage整图拉伸绘制

完整签名

java
public interface RenderCanvas {

    void fillRect(double x, double y, double w, double h);

    void drawRect(double x, double y, double w, double h);

    void drawLine(double x1, double y1, double x2, double y2);

    void fillTriangle(double x1, double y1, double x2, double y2, double x3, double y3);

    void setColor(Color color);

    void setAlpha(double alpha);

    void clip(double x, double y, double w, double h);

    void save();

    void restore();

    void translate(double dx, double dy);

    void scale(double sx, double sy);

    void rotate(double angle, double pivotX, double pivotY);

    void drawText(String text, double x, double y, TextStyle style);

    TextMetrics measureText(String text, TextStyle style);

    void drawImage(RenderImage image, double x, double y, double w, double h);
}

fillRect(x, y, w, h) / drawRect(x, y, w, h)

签名:

java
void fillRect(double x, double y, double w, double h);

void drawRect(double x, double y, double w, double h);

行为:fillRect 实心填充(受 setAlpha 影响,支持半透明);drawRect 画 1px 描边矩形、不填充内部。颜色取当前 setColor。

drawLine(x1, y1, x2, y2)

签名:

java
void drawLine(double x1, double y1, double x2, double y2);

行为:绘制 1px 直线,颜色取当前 setColor。

fillTriangle(...)

签名:

java
void fillTriangle(double x1, double y1, double x2, double y2, double x3, double y3);

行为:填充实心三角形,支持半透明;填充色为当前 setColor。

setColor(Color color)

签名:

java
void setColor(Color color);

行为:设置后续填充与描边的颜色(java.awt.Color,含 alpha)。文本颜色由 TextStyle#color() 单独指定。

setAlpha(double alpha)

签名:

java
void setAlpha(double alpha);

行为:设置全局透明度(0-1),作用于后续所有绘制,与颜色自身的 alpha 相乘。

clip(x, y, w, h)

签名:

java
void clip(double x, double y, double w, double h);

行为:把绘制裁剪到矩形区域。坐标为当前变换下的局部坐标;裁剪与既有裁剪区求交。需配合 save() / restore()——设置裁剪的那对 save/restore 结束后裁剪自动失效。

save() / restore()

签名:

java
void save();

void restore();

行为:保存/恢复全部绘制状态(颜色、透明度、裁剪、变换)。必须成对;与 MatrixStack#push/pop 共用同一栈。

translate(dx, dy) / scale(sx, sy) / rotate(angle, pivotX, pivotY)

签名:

java
void translate(double dx, double dy);

void scale(double sx, double sy);

void rotate(double angle, double pivotX, double pivotY);

行为:增量修改坐标系。rotate 的角度为弧度,轴点为当前局部坐标。

drawText(text, x, y, style)

签名:

java
void drawText(String text, double x, double y, TextStyle style);

行为:按样式绘制文本。x 的含义由 style.alignment() 决定(左缘/中心/右缘)。text 为空或 style 为 null 时什么都不画。字体路径与字号细节见 TextStyle。

measureText(text, style)

签名:

java
TextMetrics measureText(String text, TextStyle style);

行为:只测量不绘制,返回宽度/行高;度量与绘制走同一字体路径,所以测量结果可直接用于右对齐/居中排版。

drawImage(image, x, y, w, h)

签名:

java
void drawImage(RenderImage image, double x, double y, double w, double h);

行为:把整张图拉伸绘制到目标矩形(不支持子区域)。要画图集的一部分请用 RenderContext#drawTexture。

示例:带描边的 HUD 条

java
void drawBar(RenderCanvas c, double x, double y, double w, double h, double ratio) {
    c.save();
    c.setAlpha(0.85);
    c.setColor(new java.awt.Color(0x20, 0x20, 0x20));
    c.fillRect(x, y, w, h);

    c.setAlpha(1.0);
    c.setColor(new java.awt.Color(0x4F, 0xC3, 0xF7));
    c.fillRect(x, y, w * ratio, h);

    c.setColor(java.awt.Color.WHITE);
    c.drawRect(x, y, w, h);          // 1px 边框
    c.restore();
}
实时预览实时预览:RenderCanvas 绘制沙盒(在下方画布上拖拽试试)
预览加载中…