跳转至

文本 / Text

文本对话是 AVG 的核心功能,该类提供显示一段对话文本以及隐藏对话等功能。

1. 显示对话文本

通过 text.show() 方法会在屏幕上显示一段对话,并且会堵塞游戏过程,在接受鼠标/键盘输入后才会继续执行。

例子与演示
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
// 单次对话
text.show(
  "是我,是我先,明明都是我先来的……接吻也好,拥抱也好,还是喜欢上那家伙也好……",
);

// 使用数组可以在同一次调用里显示多次连续对话
text.show([
  "为什么会变成这样呢……第一次有了喜欢的人。有了能做一辈子朋友的人。",
  "两件快乐事情重合在一起。而这两份快乐,又给我带来更多的快乐。",
  "得到的,本该是像梦境一般幸福的时间……但是,为什么,会变成这样呢……~",
]);
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// 通过在参数中指定 name 字段指定说话人名字
text.show(
  [
    "只要给 options 对象定义 name 字段,就会在对话中显示名字了。",
    "多次连续对话会使用同一个名字。",
  ],
  {
    name: "愤怒的泡面",
  },
);

对话语音通过 voice 字段指定音频文件的路径, 该字段可以是一个数组,并且数组指定索引的音频和对话数组的索引是一一对应的。

音频文件默认放在 audio/voice 目录下。详情请参考音频播放相关章节。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
text.show(
  [
    "游戏开始!",
    "玩游戏就是要赢!",
    "现在让他们瞧瞧我的厉害。",
    "我要进攻了!",
  ],
  {
    voice: [
      "voice/dva-1.mp3",
      "voice/dva-2.mp3",
      "voice/dva-3.mp3",
      "voice/dva-4.mp3",
    ],
    name: "D.VA",
  },
);
text.hide();

flow.wait(1000);

text.show(["[c=red][s=26]龙神の剣を喰らえ ![/s][/c]"], {
  voice: ["voice/genji-1.mp3"],
  name: "Genji",
});

text.hide();

2. 隐藏对话

当对话要结束时,可以通过 text.hide() 方法来隐藏对话框。如果不调用则不会隐藏对话框。

例子与演示
1
2
3
4
5
6
7
8
9
text.show("泡面君,我先去洗澡了哟~", { name: "女神" });

text.show([
  "好的。",
  "请务必要多喝热水。"
], { name: "泡面君" });

// 在鼠标单击之后如果遇到 hide() 方法将会隐藏对话框
text.hide()

3. 文本控制符

我们可以通过在对话文本中插入控制符,获得不同的文本样式或进行特殊控制。以下是文字的控制符一览表:

控制符类型 说明 语法
粗体 字体加粗显示 [b]粗体[/b]
斜体 字体斜体 [i]斜体[/i]
文本颜色 更改文本颜色,可使用如 #FF0000 这样的十六进制值或者 red 这类 CSS 颜色预设值。详见:CSS Colors [c=#FF0000]文本颜色[/c]
文本大小 更改文本字号 [s=30]文本大小[/s]
删除线 文本删除线样式 [del]删除线[/del]
嵌入图片 在文本中插入一个图片,支持 .jpg, .png, .gif 等主流图片文件格式。默认目录位于 graphics/iamges [emoji=pic.jpg]
注音 在文本上面标注注音 [rt= Dark Flame Master]漆黑烈焰使[/rt]
语气停顿 文本遇到 [wait] 时,需要接收键鼠输入之后才会显示剩余文本。可以用 [wait=time] 的形式控制超时时间。time 为毫秒,如[wait=3000]则表示 3 秒后文本继续。 [wait]下次点击时继续 [wait=3000] 3 秒后继续
例子与演示
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
text.show([
  `常规的文本样式控制通常是成对出现的,详细可以参考上面表格的语法。`,
  `我们可以通过 c 标签来控制文本颜色,颜色代码支持使用如 [c=#FF0000]#FF0000[/c] 这样的十六进制颜色代码。`,
  `也支持诸如 [c=yellow]yellow[/c] 这样的 CSS 预设颜色值。`,
  `[b]粗体字[/b] 可以使用 b 标签来实现,同理,我们也可以通过 i 标签来让文本变成 [i]斜体[/i]。`,
  `文本的字号可以通过数字来更改。比如: [s=30]使用30号字[/s],[s=20]使用20号字[/s],[s=10]使用10号字[/s],或者更大的 [s=72]72号字[/s]。`,
  `但需要注意的是,更大的字号可能会导致文本布局出现错误,因此请酌情使用。`,
  `当然,更加复杂的嵌套用法也是支持的,比如说同时[b][c=purple]更改颜色和粗体[/c][/b],甚至是[del][c=grey]删除线加上颜色[/c][/del]。`,
]);

text.hide();
1
2
text.show("这一切都是[c=red][rt=Steins;Gate]命运石之门[/rt][/c]的选择。");
text.hide();
1
2
3
// 停顿 1 秒
text.show("你啊…… [wait=1000] 你就是在等我来接你回去的吧?");
text.hide();

4. 变量值嵌入

我们可以使用 JavaScript 的 Template literals 来实现变量值的嵌入。

例子与演示
1
2
3
4
5
6
7
8
const name = "李狗蛋";
text.show(`我的名字是…… [c=red]${name}[/c]。`);
text.hide();

// 当然,直接进行字符串拼接也是可以的啦~
const number = 3;
text.show("老实交代,你是不是把我的" + number + "个雪糕偷吃了!!!");
text.hide();