For the complete documentation index, see llms.txt. This page is also available as Markdown.

UI 参考

CSL UI 绘制的参考说明与模式。

本页面收集了在你掌握基础知识后会很有帮助的 UI 规则、模式和示例。

阅读 UI 基础 首先。

核心原则

  1. Y 轴向上。 屏幕坐标以左下角的 (0, 0) 为原点。

  2. 从屏幕矩形开始。 使用 UI.get_safe_screen_rect()UI.get_screen_rect(),然后基于这些矩形推导出所有内容。

  3. push/pop 模式。 使用 延后执行 以避免每次 push 都泄漏 UI 状态。

  4. 移动优先。 避免仅依赖悬停的交互。

  5. 文本使用 UTF-8,但字符覆盖并不完整。 字符仍然需要在所选字体或其回退字体中有对应字形。某些字符,包括表情符号,尚不受支持。

  6. 使用玩家的 late-update 栈。 将该玩家的所有 UI 绘制都来自 ao_late_update 下的 is_local_or_server().

快速开始:一个简单的 HUD 按钮

Player :: class : Player_Base {
    ao_late_update :: method(dt: float) {
        if this.is_local_or_server() {
            draw_my_hud(this);
        }
    }
}

draw_my_hud :: proc(player: Player) {
    rect := UI.get_safe_screen_rect()
        .bottom_right_rect()
        .grow(40, 150, 40, 150)
        .offset(-50, 50);

    bs := UI.default_button_settings();
    ts := UI.default_text_settings();

    if UI.button(rect, bs, ts, "Action").clicked {
        log_info("来自 % 的操作", {player.get_username()});
    }
}

基础绘制

四边形和图像

文本

布局:从矩形开始

布局使用 cut

cut 函数 必须 在摆放多个 UI 元素时用于布局:

自动缩放与未缩放矩形

常规矩形函数接受 并按以下比例缩放 UI.get_current_scale_factor() (基于高度为 1080 点的参考画布)。

使用 _unscaled 变体,仅当某个值已经以实际屏幕像素表示时使用,例如从现有矩形测得的尺寸:

按钮

按钮精灵规则

UI.default_button_settings() 已经提供了完整的按钮样式。对于自定义按钮,请设置 sprite 以及可选地设置 sprite_hoveredsprite_pressed。当可选精灵为空时,会复用基础精灵。

模态窗口

使用 UI.begin_modal / UI.end_modal 用于显示变暗的背景;当玩家点击模态窗口外部或按下 Escape 时会关闭。

UI 状态管理

使用 延后执行 针对每一对 push/pop:

重复元素的 ID

在绘制列表或重复项时,请 push 唯一 ID:

常用尺寸

以下尺寸已知在各种设备上都表现良好:

  • 屏幕文字点数:标题 52,正文 36

  • 屏幕矩形点数:简单对话框 600x400,标准按钮 210x74,退出按钮 65x65

  • 世界空间文字大小:0.30 米

最佳实践

  • 使用 延后执行 针对每一对 push/pop。

  • 为重复元素 push ID。

  • 在使用计算出的尺寸时,请使用未缩放函数。

  • 使用以下方式适配图标宽高比 rect.fit_aspect(texture.get_aspect()).

  • 始终检查 is_local_or_server() 在绘制交互式 UI 之前。

最后更新于