内容提要
本文介绍TyranoScript内核魔改中添加自定义命令的方法:脚本经分词解析后,框架按tag调用kag.tag文件中的函数;在tyrano.plugin.kag.tag对象添加属性即可新增命令,例如perform_show集成Spine动画,通过pm传参,并须调用nextOrder执行下一句。
延伸解读
自定义命令的注册机制
在 TyranoScript 中,所有可用的命令都对应 tyrano.plugin.kag.tag 对象下的一个属性。每个属性包含 pm 参数定义和 start 函数。当脚本解析到某个 tag 时,框架会调用该 tag 对应的 start 函数。因此,新增自定义命令只需向这个对象添加新属性,无需修改解析器核心。这为魔改提供了清晰的扩展点。
参数传递与 nextOrder 的必要性
自定义命令中,pm 对象用于接收脚本标签里的属性值,例如 name、storage 等。在 start 函数内,可以通过 pm.xxx 访问这些值。函数执行完毕后,必须调用 this.kag.ftag.nextOrder(),否则脚本会停在该命令处,无法继续执行后续指令。这是保证命令链正常推进的关键。
Spine 集成的实现要点
示例中的 perform_show 命令通过动态创建 div 容器,并调用 spine.SpinePlayer 来加载 Spine 动画。需要提供 jsonUrl 和 atlasUrl 指向资源文件,并设置动画名称、尺寸、位置等参数。由于 Spine 官方 JavaScript 运行时库缺少文档,开发者需参考示例或源码来调整配置。
Q&A
TyranoScript 中如何添加一个自定义命令?
在 tyrano.plugin.kag.tag 对象里添加属性即可新增自定义命令。例如添加 perform_show 属性,其 start 函数会在执行 [perform_show] 指令时被调用。
TyranoScript 脚本是如何被解析并执行对应函数的?
脚本先被分词,然后按规则组合成一组,得到类似控制台打印的对象。框架根据不同的 tag 运行不同的函数,这些函数分布在 kag.tag 开头的文件中。
在 TyranoScript 自定义命令中,pm 参数有什么作用?
pm 参数用于接收命令中传入的属性值。例如在 [perform_show name="fx" storage="fx" ...] 中,name、storage 等属性都会传到 pm 这个参数里,供 start 函数使用。
为什么在 TyranoScript 自定义命令的 start 函数中必须调用 this.kag.ftag.nextOrder()?
this.kag.ftag.nextOrder() 是提示程序跑下一句命令的函数,如果不调用,脚本执行会停止,无法继续运行后续命令。
如何为 TyranoScript 集成 Spine 动画?
可以通过添加自定义命令 perform_show 来集成 Spine。在 start 函数中创建 div 容器,并使用 spine.SpinePlayer 加载 json 和 atlas 文件,设置动画等参数。
TyranoScript 中 perform_show 命令的使用示例是怎样的?
使用示例:[perform_show name="fx" storage="fx" height="100" width="100" top="500" left="500" ]。其中 name 用于区分多个相同表情,storage 指定资源名称,其他属性控制位置和大小。