高级

有了前面基础内容的学习,在日常应用中已经没有什么问题了,但是还有一些高级语法可以帮助我们更好地编写剧本,掌握它们的使用会让您在编写剧本时更加得心应手,它包括了一些宏定义、换行和续行等功能,除了这些高级语法,还包括一些高级功能,可以让你编写出更为酷炫的剧本来,像是高级格式化,关键颜色等等。听到这里,您是不是已经有一些些小心动了呢?那让我们一起来学习它们吧。

宏定义

也许您从来没有听说过 "宏定义" 这个词语,没有关系,宏定义就是定义一些可以重复使用或者需要被简化的值,方便通过别名来引用该值, 简单的来说它就是替换,我们把这个用来替代的别名称为 "宏名称",而将指定某个宏名称等于某个值或内容的过程称为 "宏定义"

如何定义宏

如果需要使用宏,那就需要预先定义宏,定义宏以标识符 "#define" 开头,紧接着就是输入 "宏名称 = 值或内容" ,如下所示:

如何使用宏

使用宏是非常简单的,我们可以剧本中直接使用宏名称,也可以将该宏名称包裹在标识符 "#!""!#" 之间,当使用了标识符包裹的形式时,直接使用宏名称的方式将被忽略。当出现 "命名冲突" 时,我们必须使用 "标识符包裹" 的方式,否则可能会引发一些无法预料的问题。

例如: 当您定义了一个称为 "Title" 的宏的时候,由于 "Title" 是亦是场景的标题属性,为了防止其被替换而导致标题不能显示,我们必须要使用标识符包裹形式 " #!Title!# "

宏示例图

示例:

#define TEST = 我是宏定义
#define TIME = 10

<!--ACTION-->
Type=theme
Title=#!TEST!#
Content={| 宏定义TEST的内容是#!TEST!# |}
AutoSwitch=TIME
<!--ACTION-->

解释:上述定义了两个宏 TESTTIME,场景将在 10秒 后自动切换到下一场景,场景显示的标题是 "我是宏定义",内容为 "宏定义TEST的内容是我是宏定义"

忽略宏替换

使用宏定义将会替换所有与宏名称相同的词,当然有时候可能出现了个别与宏名称相同的词,并不需要被替换,这个时候需要将这个与宏名相同的词用 反斜杠"\“ 包裹起来,在替换的时候将会跳过这个词。

示例:

#define Test = 我是宏定义

<!--ACTION-->
Type=theme
Title=宏定义示例
Content={| \Test\中的内容是:Test |}
<!--ACTION-->

解释:上述示例中场景显示的内容为 "Test中的内容是:我是宏定义"

换行符

有时候我们想要在某个词之后断句,之后的内容在新的一行显示,比如诗歌诗词等,这个时候我们就需要使用 换行符 "<br/>" 了,顾名思义,换行符就是在这个符号之后的内容需要另起一行。

换行示例图

示例:

<!--ACTION-->
Type=theme
Title=《静夜诗》
Content={| 窗前明月光,<br/>疑似地上霜,<br/>举头望明月,<br/>低头思故乡。|}
<!--ACTION-->

续行符

或许你已经发现,有时候剧本中的内容某一行特别长,我们需要滚动水平滚动条才能看到之后的内容,比如有的属性值只能写在一行內,如标题或者计时器的警告时刻,有的我们只是想让内容换行看起来清晰一些而又不想在显示的时候真正换行,如主题场景中的 "Content属性值" ,这个时候我们就需要到 续行符 "\\\\" 了,其作用就是让你剧本内容能够续写在新的一行而不影响原来的功能。

示例:

<!--ACTION-->
Type=theme
Title=《静夜诗》
Content=
\\\\ {|
\\\\ 窗前明月光,<br/>
\\\\ 疑似地上霜,<br/>
\\\\ 举头望明月,<br/>
\\\\ 低头思故乡。
\\\\ |}
<!--ACTION-->

解释:以上 "Content属性" 中的多行内容,实际上等同于换行符示例中 "Content属性" 的一行内容,我们只是为了方便剧本阅读,而把原本同一行的内容续到了新行上而已。

剧本注释

剧本注释是一个相当简单的语法功能,简单地说注释就是将剧本中的某些内容忽略,比如有时候想在某些属性旁边批注一些文字,又或者我们想暂时忽略掉某个属性,而不是将内容删除掉,这样我们能够很快速地恢复回来,我们只需要把内容用标识符 "/*""*/" 包裹起来即可。是不是觉得这个小功能非常棒呢?我想你会喜欢它的。

注释示例图

示例:

<!--ACTION-->
Type=theme
Title=《静夜诗》/* 这是诗的标题 */
Content={|/* 我不会被显示 */窗前明月光,<br/>疑似地上霜,<br/>举头望明月,<br/>低头思故乡。|}
/* AutoSwitch=10 */ /* 暂时先注释掉这个属性,先不需要自动切换场景 */
<!--ACTION-->

资源定义

在剧本中我们可能会用到一些资源,如 字体颜色图片 等,这些资源我们都需要预先定义,在使用的时候我们通过 "资源名" 来引用该资源,资源定义的通用格式如下:

解释:

  1. 用标识符 "{""}" 包裹起来的部分为 必需 参数。
  2. 用标识符 "[""]" 包裹起来的部分为 可选 参数。

颜色资源

颜色的资源类型为 COLOR,当您定义了颜色,就可以在场景中指定 文字颜色,又或者指定 背景颜色,其定义语法格式如下:

#define COLOR mycolor1 #11FF66 
#define COLOR mycolor2 #AA88FF 

资源名必须使用 "#" 作为开头,如:#mycolor,色彩使用 "#" 加十六进制表示RGB,如:#000000。为了方便剧本编写,我们已经预定义了一些常用的颜色,如:

颜色调色板示例

更多颜色名请参见 预定义颜色,或者参见 如何自己调配个性颜色?

字体资源

字体的资源类型为 FONT,使用字体资源可以给文字设置 字体字号粗斜体 等样式,让场景展示具有更丰富的表现力,其定义语法格式如下:

可选样式属性如下:

注意:参数间需要用 空格 隔开,字体字号 不可省略,如果字体名称存在空格,需要使用 双引号 包裹起来,其余三种样式属性 粗体(Bold)斜体(Italic)下划线(Underline) 可以任意组合。

例如:

// 字体资源定义
#define FONT font1 微软雅黑 16 Bold Underline Italic
#define FONT font2 SimHei 22 Underline Italic
#define FONT font3 宋体 28 Bold Underline
#define FONT font4 楷体 38 Bold Underline
#define FONT font5 "Felix Titling" 200 Bold   /* 字体名称存在空格,需要引号包裹 */
#define FONT font6 SimHei 60 Bold

// 字体使用演示
<!--ACTION-->
Type=theme
BkImage=#deepskyblue  /* 深空蓝色背景 */
Content={|
  <f font1>我是微软雅黑</f>
  <f font2>我是SimHei</f>
  <f font3>我是宋体</f>
  <f font4>微软楷体</f>
  <f font5>我是Felix Titling</f>
|}
<!--ACTION-->

PS. 关于字体失效的问题请参考 如何安装使用个性字体?

图片资源

图片的资源类型为 IMAGE,当您定义了图片资源,便可以在场景中插入图片了,其定义语法格式如下:

例如:

// 图片资源定义
#define IMAGE image1 Image\snail.png
#define IMAGE image2 Image\tag_rock.png
#define IMAGE image3 Image\smiled.png

// 图片使用演示
<!--ACTION-->
Type=theme
BkImage=#deepskyblue  /* 深空蓝色背景 */
Content={|
  图片1 <i image1>
  图片2 <i image2>
  图片3 <i image3>
|}
<!--ACTION-->

解释:图片路径可以是相对路径,如:Image\xxx.png,也可以是绝对路径,如:C:\xxx\xxx.png。

自定义热键

通常 "热键" 也被称为 "快捷键",事实上热键也算是一种资源,因此热键自定义的方式跟资源定义类似,热键的资源类型为 SHORTCUT,热键需要组合 "Alt键" 来使用,其定义语法格式如下:

可选动作类型如下:

例如:

#define SHORTCUT ActiveApp     Z      /* Alt+Z 激活应用窗口 */
#define SHORTCUT NextAction    N      /* Alt+N 下一幕 */
#define SHORTCUT TimerReset1   Q      /* Alt+Q 1号计时器重置 */
#define SHORTCUT TimerOpt2     S      /* Alt+S 2号计时器开始或暂停 */

高级格式化

当您需要展现一些较为复杂的内容时,例如给文字加上下划线斜体粗体,改变 字体字号,又或者是 插入一张图片、一个可以 打开网页、文件的外部链接 等,要使用一种经过简化的 类html格式文本 来描述复杂的图文格式,它的语法具有如下特点:

标签及功能:

标签 功能 说明 示例
<a> 表示内容为链接

具有特定功能的超链接:

  • 网址链接
  • 系统程序
  • 文件路径
  • switch切换
  • script剧本
  • image图片
  • sound音乐

<a http://qq.com>超链接</a>
<a notepad.exe>记事本</a>
<a calc.exe>计算器</a>
<a c:\xxx.ppt>打开文件</a>
<a switch:1>下一幕</a>
<a switch:-1>上一幕</a>
<a script:xxx.txt>加载剧本</a>
<a image:xxx.jpg>图片</a>
<a sound:xxx.mp3>音乐</a>

<b> 表示使用粗体 <b>粗体</b>
<i>

表示使用斜体
用于插入图片

图片资源可以预先定义

<i>斜体</i>
<i 图片资源>

<u> 表示使用下划线 <u>下划线</u>
<s> 表示内容被选中 <s>选中</s>
<c> 表示使用的颜色 预定义值或十六进制RGB值

<c #blue>蓝色</c>
<c #00ff00>绿色</c>

<f> 表示使用的字体 字体资源需要预先定义 <f font1>字体1</f>
<n> 表示插入一个换行符 窗前明月光<n>疑似地上霜
<p> 表示内容是一个段落 <p>我是一个段落</p>
<r> 表示忽略语法标签功能 内部标签将被原样输出 <r>标签<n>用于换行</r>
<x> 表示向移动x个像素 从标签处开始移动 <x 5>向右偏移5个像素
<y> 表示向移动y个像素 从标签处开始移动 <y 8>向下移动8个像素

示例:

资源定义(字体)
#define FONT font1 微软雅黑 16 Bold Underline Italic
#define FONT font2 SimHei 22 Underline Italic
#define FONT font3 宋体 28 Bold Underline

资源定义(图片)
#define IMAGE image1 Image\snail.png
#define IMAGE image2 Image\tag_rock.png
#define IMAGE image3 Image\smiled.png

场景二(主题高级应用)
<!--ACTION-->
Type=theme
BkImage=#deepskyblue  /* 深空蓝色背景 */
TextEffect=[Typing@50]
Content={|
<f font1>高级格式化示例</f>
<f font2><c #00FF00>绿色微软雅黑字体</c></f>
<f font3><c #Red>红色宋体字体</c></f>
<i>斜体</i> <b>粗体</b> <u>下划线</u> <b><i>粗斜体</i></b>
<b><u>粗体下划线</u></b>
<s>插入图片</s> <i image1> <i image2> <i Image/smiled.png>
<a http://best-debater.jeffreytse.net><c #BBFF22>打开网址(入门教程)</c></a>
<a Example - 剧本示例.txt>打开示例剧本</a>
<a calc.exe>计算器</a> <a notepad.exe>记事本</a> <a explorer.exe>资源管理器</a>
<a script:Example - 剧本示例.txt><c #Yellow>加载剧本</c></a>
<a switch:-1>上一幕</a> <a switch:1>下一幕</a>
<a switch:-999>回到首页</a>
<a image:[30,100]Image\main.jpg>图片1</a>
<a image:Image\main1.jpg>图片2</a>
<a sound:[Loop@2]Sound\Prize.mp3>音乐1</a> /* 循环播放音乐2次 */
<a sound:Sound\Wait.mp3>音乐2</a>
| }
<!--ACTION-->

效果:

高级格式化示例图

高级计时器

在使用计时器场景的时候,除了可以自定义计时器的警告音和闪烁之外,这里我们也提供了一些高级选项,通过这些选项您可以让计时器变得更有个性。

关键颜色

如果您希望在某个时刻改变计时器的颜色,可以使用关键色 "KeyColor 属性",关键时刻之间需要使用逗号 " , " 间隔,颜色需要包裹在方括号 " [ "" ] " 之间,颜色值可以是 颜色资源 或者 十六进制RGB值,如果不指定颜色值,则恢复到 默认颜色,如下所示:

示例:

<!--ACTION-->
Type=timer
Title=计时器颜色变换
Time=120
Alert=[Flash]80,[Flash@3]20
KeyColor=[#red]60,[#00ff00]30,10
<!--ACTION-->

计时器关键颜色图

解释:以上示例计时器将在剩余60秒的时候变为红色,剩余30秒的时候变为绿色(#00ff00),剩余10秒的时候恢复默认颜色。

关键背景

如果您希望在某个时刻改变计时器背景,可以使用关键背景 "KeyBkImage 属性",关键时刻之间需要使用逗号 " , " 间隔,图片需要包裹在方括号 " [ "" ] " 之间,图片可以是 图片资源 或者 图片路径,如果不指定图片,则恢复 默认背景, 如下所示:

示例:

<!--ACTION-->
Type=timer
Title=计时器背景变换
Time=120
Alert=[Flash]80,[Flash@3]20
BkImage=Image/default.jpg
KeyBkImage=[Image/image1.jpg]60,[Image/image2.jpg]30,10
<!--ACTION-->

解释:以上示例背景图片将在剩余60秒的时候变为 图片1 (image1.jpg),剩余30秒的时候变为 图片2 (image2.jpg),剩余10秒的时候恢复 默认背景图片 (default.jpg)

计时器模式

事实上计时器存在多个可以配置的特性,您可以使用 "TimerMode 属性" 来配置它们,如下所示:

模式选项如下:

选项 功能 说明 默认
CountDown 计时器倒数计时模式 表示计时器时间是否为倒数计时模式 On
SingleTime 单一计时器计时模式 表示同一时刻只能有一个计时器在计时 On
SingleAlert 单一警告音播放模式 表示同一时刻只能有一个计时器在播放警告音 On
PauseFlash 暂停状态下闪烁模式 表示暂停状态下计时器是否闪烁提示 Off
AutoReset 计时器自动重置模式 表示切换场景后是否自动重置计时器 Off
ZeroReset 计时器归零重置模式 表示计时器时间归零后是否自动重置 Off

模式选项若不进行配置将会使用 默认值,选项值可以是打开 "On" 或者关闭 "Off",选项名和选项值之间需要使用标识符 "@" 间隔开,如果选项值为 "On" 则可以省略,选项需要用方括号 " [ "" ] " 包裹起来,当有多个选项的时候,只需要简单地将选项依次填入。

示例:

计时器场景(双计时器)
<!--ACTION-->
Type=timer
Title=超级大辩论
Time=120 || 120
Caption=正 方 || 反 方
Alert=[Flash]80,[Flash@3]20
TimerMode=[AutoReset][SingleTime@Off]
<!--ACTION-->

解释:上述示例将打开 自动重置模式,并关闭了 单一计时器计时模式,这样我们每次切换到该场景的时候,计时器都会自动重置时间,并且我们也可以使用两个计时器进行计时。

时间格式

计时器场景中默认时间格式为 "00:00",当您需要自定义时间格式的时候,如:"00分00秒",需要使用我们的时间格式 "TimeFormat 属性",然后使用 高级格式化 中的语法表示格式内容,当您需要时间中的某个数字以指定图片来显示的时候,可以使用 "<nx 图片资源>" 标签,其中 x 只能是数字 0-9 中的任意一个,如:<n0 xxx.png> 表示数字0以图片xxx.png来显示,如下所示:

时间格式标签:

标签 名称 说明
[DD] 天 数 用于表示当前计时器剩余时间的天数
[HH] 时 数 用于表示当前计时器剩余时间的时数
[MM] 分 数 用于表示当前计时器剩余时间的分数
[SS] 秒 数 用于表示当前计时器剩余时间的秒数
[HHH] 总时数 用于表示当前计时器剩余时间的总时数
[MMM] 总分数 用于表示当前计时器剩余时间的总分数
[SSS] 秒秒数 用于表示当前计时器剩余时间的总秒数
[DEFAULT] 默认格式 用于表示计时器的默认格式 [MM]:[SS]

示例:

格式 显示
[MM]分[SS]秒 00分00秒
[MM]:[SS] 00:00
[MMM]分 120分
[SSS]秒 120秒
[DEFAULT] 00:00
<c #Red>[DEFAULT]</c> 00:00 (红色字体)
[DEFAULT]<n0 xxx.png> 00:00 (数字0使用图片xxx.png显示)

示例一:

计时器场景(计时器)
<!--ACTION-->
Type=timer
Title=超级大辩论
Caption=终极决战篇
Time=120
Alert=[Flash]80,[Flash@3]20
TimeFormat=[MM]分[SS]秒
<!--ACTION-->

自定义按钮

除了可以自定义时间格式,我们还可以自定义计时器按钮,计时器按钮也是使用 高级格式化 语法来表示按钮内容,自定义重置按钮需要使用 "ResetText 属性",自定义开始按钮需要使用 "StartText 属性",而自定义暂停按钮则需要使用 "PauseText 属性",如下所示:

示例:

标题场景
<!--ACTION-->
Type=timer
Title=超级大辩论
Caption=狡辩环节
Time=120
Alert=60,10,3
ResetText=<b>RESET</b>
StartText=<u>START</u>
PauseText=<u>PAUSE</u>
<!--ACTION-->

解释:将重置按钮变为 RESET,开始按钮变为带下划线的 START,而暂停按钮变为带下划线的 PAUSE

高级示例

经过以上的介绍,我们已经学习完了计时器的所有高级用法,通过定义资源、自定义计时器按钮、自定义计时器时间格式等,我们可以实现许多酷炫漂亮的效果,接下来让我们来学习一些高级示例:

示例一:

高级计时器示例图

资源定义(字体)
#define FONT font1 微软雅黑 16 Bold Underline Italic
#define FONT font4 楷体 38 Bold Underline
#define FONT font5 "Felix Titling" 200 Bold
#define FONT font6 SimHei 60 Bold

资源定义(图片)
#define IMAGE image2 Image\tag_rock.png
#define IMAGE image3 Image\smiled.png
#define IMAGE image4 Image\buttons\reset.png
#define IMAGE image5 Image\buttons\start.png
#define IMAGE image6 Image\buttons\pause.png

场景一(高级格式化计时器)
<!--ACTION-->
Type=timer
BkImage=Image\main2.jpg
Time=300
Alert=[Flash]296,287,[Sound\Dindin.mp3][Flash]289,[Sound\Dindin.mp3]287,[Sound\Wait.mp3]273,[Flash@10]230,60
KeyColor=[#Yellow]295,[#Red]292,[#gold]290,[#Fuchsia]297,[#ED4F32]285,[#Orange]282,280
KeyBkImage=[Image\main.jpg]290,[Image\main1.jpg]286,280
Title=<i image3><f font4>正方</f>开篇陈述<f font4>第三辩手</f>发言<i image3>
Caption=<i image2> 诡辩环节
TextEffect=[Typing@12]
ResetText=<i image4><f font1>RESET</f>
StartText=<i image5><f font1>START</f>
PauseText=<i image6><f font1>PAUSE</f>
TimeFormat=<f font5>[MM]<f font6></f>[SS]<f font6></f></f>
TimerMode=[PauseFlash@On][AutoReset@On]
<!--ACTION-->

示例二:

高级计时器示例图

资源定义(字体)
#define FONT font1 微软雅黑 16 Bold Underline Italic
#define FONT font4 楷体 38 Bold Underline
#define FONT font5 "Felix Titling" 200 Bold
#define FONT font6 SimHei 60 Bold

资源定义(图片)
#define IMAGE image2 Image\tag_rock.png
#define IMAGE image3 Image\smiled.png
#define IMAGE image4 Image\buttons\reset.png
#define IMAGE image5 Image\buttons\start.png
#define IMAGE image6 Image\buttons\pause.png

资源定义(计时器七彩数字)
#define IMAGE color0 Image\numbers\color\0.png
#define IMAGE color1 Image\numbers\color\1.png
#define IMAGE color2 Image\numbers\color\2.png
#define IMAGE color3 Image\numbers\color\3.png
#define IMAGE color4 Image\numbers\color\4.png
#define IMAGE color5 Image\numbers\color\5.png
#define IMAGE color6 Image\numbers\color\6.png
#define IMAGE color7 Image\numbers\color\7.png
#define IMAGE color8 Image\numbers\color\8.png
#define IMAGE color9 Image\numbers\color\9.png

场景一(高级格式化计时器)
<!--ACTION-->
Type=timer
BkImage=[0,70]#deepskyblue
Time=300
Alert=[Flash]296,287,[Sound\Dindin.mp3][Flash]289,[Sound\Dindin.mp3]287,[Sound\Wait.mp3]273,[Flash@10]230,60
KeyColor=[#Yellow]295,[#Red]292,[#gold]290,[#Fuchsia]297,[#ED4F32]285,[#Orange]282,280
KeyBkImage=[Image\main.jpg]290,[Image\main1.jpg]286,280
Title=<i image3><f font4>正方</f>开篇陈述<f font4>第三辩手</f>发言<i image3>
Caption=<i image2> 诡辩环节
TextEffect=[Typing@12]
ResetText=<i image4><f font1>RESET</f>
StartText=<i image5><f font1>START</f>
PauseText=<i image6><f font1>PAUSE</f>
TimeFormat=<f font5>[MM]<f font6></f>[SS]<f font6></f></f><n0 color0><n1 color1><n2 color2><n3 color3><n4 color4><n5 color5><n6 color6><n7 color7><n8 color8><n9 color9>
TimerMode=[PauseFlash@On][AutoReset@On]
<!--ACTION-->

剧本包含

随着剧本内容的不断增长,剧本内容阅读起来将会变得越来越困难,这个时候我们可以将剧本内容分块编写,然后在主剧本文件中将这些分块编写的内容包含进来,就好像一本书的书目,通过目录我们将每一个章节依次联结起来。要包含外部剧本需要以标识符 "#include" 开头,然后加上需要引入的剧本文件的 相对路径 或者 绝对路径,被包含的剧本内容将插入到语句所在的地方,如下所示:

示例:

自定义快捷键
#define SHORTCUT ActiveApp     Z      /* Alt+Z 激活应用窗口 */
#define SHORTCUT LastAction    L      /* Alt+L 上一幕 */
#define SHORTCUT NextAction    N      /* Alt+N 下一幕 */
#define SHORTCUT TimerReset1   Q      /* Alt+Q 1号计时器重置 */
#define SHORTCUT TimerOpt1     S      /* Alt+S 1号计时器开始或暂停 */
标题场景
<!--ACTION-->
Type=caption
Title=古诗词鉴赏
<!--ACTION-->
  • 主剧本文件:
包含外部剧本
#include Shortcut.txt        /* 包含快捷键定义 */
#include Introduce.txt       /* 包含介绍标题场景 */

<!--ACTION-->
Type=theme
Title=《静夜诗》/* 这是诗的标题 */
Content=窗前明月光,<br/>疑似地上霜,<br/>举头望明月,<br/>低头思故乡。
<!--ACTION-->

文件编码

文件编码通俗地来说,就是文件在计算机中的存储形式,为了能让软件读懂剧本文件的内容,您需要使用我们约定的编码格式来保存剧本内容,我们推荐使用 UTF8格式,当然,您也可以使用 GBK编码格式。如果您使用的是,除了这两种编码格式外的其他编码格式保存文件,当您在其他计算机系统播放您编写好的剧本文件时,有可能会出现意想不到的乱码。