NarraLeaf

角色

负责对白语句与命名的 `Character` 类,含对话框头像与立绘绑定

Character 负责控制角色说出的台词

注意: Character 本身不驱动舞台立绘布局;舞台展示请使用 Image对话框旁小头像(ADV 头像)通过 avatar / portraits 配置,并在 UI 中使用 Avatar — 详见 Dialog

公共方法

constructor

  • name: string | null - 传入 null 即为旁白,旁白在对话框中不显示名字
  • config?: DeepPartial<CharacterConfig> - CharacterConfig

[[Callable]]

character.say 可以作为标签函数使用

character`Hello, ${Word.color("Alice", "#f00")}!`, // 将输出 "Hello, Alice",其中 "Alice" 为红色

// 等价于

character.say`Hello, ${Word.color("Alice", "#f00")}!`

注意: 在使用 Webpack 等打包工具时,不能这样链式调用这个方法:

scene.action([
    character`sentence 1` `sentence 2`, // 这会抛出一个错误
]);

链式方法

say

重载 1 / 4

说一句话

character
    .say("Good morning!")
    .say("How are you?")

重载 2 / 4

使用自定义句子对象

character.say(
    new Sentence(character, [
        "早上好,我是 ",
        new Word("Alice", {color: "#f00"}), // 一些单词可以着色
    ])
) // 将输出「早上好,我是 Alice」,其中 "Alice" 为红色

注意: 台词名称将与句子的名称相同

重载 3 / 4

使用字符串和 Word 对象的混合内容

character.say([
    "你好,",
    new Word("艾丽斯", {color: "#f00"}), // 一些单词可以着色
]) // 将输出「你好,艾丽斯」,其中 "艾丽斯" 为红色

重载 4 / 4

使用 SentencePrompt 的简写形式

    character.say`你好,${Word.color("艾丽斯", "#f00")}!` // 将输出「你好,艾丽斯」,其中 "艾丽斯" 为红色
  • texts: TemplateStringsArray - 模板字符串数组
  • ...words: SingleWord[] - SingleWord

setName

设置角色的名称

character
    .setName("艾丽斯(生气)")
    .say("你想要什么?")
  • name: string - 角色的名称

0.26.0 起,名字的改动会随存档保存。 在此之前 Character 从不序列化自身状态,因此没有任何存档记录过改名:在一位显示为「???」的说话人揭晓之后存档的玩家,读回来仍然是「???」——对话框里如此,回溯里也如此。现在开始新游戏或读档都会交还剧本所写的名字,而不是上一次游玩留下的那个

更早版本写出的存档不含角色条目,仍可照常读取,读回后保留剧本所写的名字。由于角色现在也会占用存档条目,而自动生成的元素 id 描述的是元素在动作树中的位置而非身份,需要恢复存档的应用应当通过 DevTools.setElementStaticId 给自己的角色阵容命名

setAvatar

设置或清除角色级对话框头像(旁白、以及无可见绑定立绘时的回退)

const alice = new Character("Alice")
    .setAvatar("/assets/alice/avatar-default.png");

alice.setAvatar(false); // 关闭角色级头像
  • avatar: DialogAvatar | false | null — 图片源、解析器、false 关闭,或 null 清除

解析语义与优先级见 Dialog

addPortrait

将舞台 Image 绑定到该角色,并可选择为该绑定配置立绘级对话框头像(字符串或解析器)

alice.addPortrait(aliceBody, {
    avatar: "/assets/alice/avatar-normal.png",
});
  • image: Image — 舞台立绘
  • config?: { avatar?: DialogAvatar } — 该绑定可选的头像覆盖

setPortraits

替换完整的 portraits 列表(可为裸 Image{ image, avatar }

alice.setPortraits([
    { image: aliceBody, avatar: "/assets/alice/avatar-a.png" },
    bobPortraitImage,
]);

apply

这是一个 say 的特殊别名

character`Hello, ${Word.color("Alice", "#f00")}!`;

注意: 在使用 Webpack 等打包工具时,不能这样链式调用这个方法:

scene.action([
    character`sentence 1` `sentence 2`,
]);

但你可以像这样:

scene.action([
    character`sentence 1`.setName("Alice"),
]);

这个方法在角色只说一句话时缩短了代码

scene.action([
    character`Hello, ${Word.color("Alice", "#f00")}!`,
]);
  • texts: TemplateStringsArray - 模板字符串数组
  • ...words: SingleWord[] - SingleWord

本页目录