事件
在 引.故事 中,我们为场景添加事件,并通过激活不同的事件指向不同的场景,以此串联多线故事。 在这个过程中,我们通过给事件增加脚本,来为整个故事增加过程控制。
其他对象
在 引.故事 中,可绑定脚本的对象不只有事件,但所有其他对象的脚本都是根据事件改编而来。
代码提示
通过编辑器生成脚本文件自带 JSDoc 注释,可在支持的IDE中显示代码提示。
增加的控制函数如下:
显示判定
在场景开始时运行,通过该函数判定该事件是否在当前场景中显示。 若没有注册该函数,则自动判定为真。
js
export default {
...其他参数(不用管),
/**
* 是否显示事件 - 当前存档是否显示该事件
*
* @param {object} save 存档 - 故事存档
* @param {object} story 故事 - 故事对象,可进行提示,弹窗等对故事进行修改操作
* @param {object} loader 加载器 - 事件加载器的 Vue 节点
* @return {Promise<Boolean>}
*/
async show(save, story, loader) {
console.log('存档:\n', save)
console.log('故事:\n', story)
// 您可在这个过程中判定是否显示该事件
// 或者修改存档等做一些其他的事
// 此处可返回 true 或 false
return true
}
}激活判定
在场景开始时运行,若该事件已通过显示判定为真,则通过该函数判定该事件在当前场景中是否可被点击,不可点击时透明度会被降低。 若没有注册该函数,则自动判定为真。
js
export default {
...其他参数(不用管),
/**
* 是否可选择事件 - 当前存档是否可选择该事件
*
* @param {object} save 存档 - 故事存档
* @param {object} story 故事 - 故事对象,可进行提示,弹窗等对故事进行修改操作
* @param {object} loader 加载器 - 事件加载器的 Vue 节点
* @return {Promise<Boolean>}
*/
async active(save, story, loader) {
console.log('存档:\n', save)
console.log('故事:\n', story)
// 您可在这个过程中判定该事件是否可被选择
// 或者修改存档等做一些其他的事
// 此处可返回 true 或 false
return true
}
}事件运行
事件被激活时运行,仅当事件通过激活判定为真时运行, 该函数可返回一个 场景地址 或 场景对象 来指定下一个场景, 或者返回 undefined 继续使用 事件.目标场景 作为下一个场景, 您同样可以通过 throw 一个错误来终止此事件的运行,这样用户就无法通过此次点击/事件进入任何场景。
节点修复
注意:若该脚本可能返回不同于 目标场景 的场景,可在本 事件 所属 场景 的 附加场景 中添加该场景,用于在节点面板中显示该节点。
不同的事件有不同的触发方式:
| 事件 | 触发方式 |
|---|---|
| 文字按钮 | 点击 |
| 媒体按钮 | 点击 |
| 自动事件 | 场景结束 |
js
export default {
...其他参数(不用管),
/**
* 运行事件
*
* @param {object} save 存档 - 故事存档
* @param {object} story 故事 - 故事对象,可进行提示,弹窗等对故事进行修改操作
* @param {object} loader 加载器 - 事件加载器的 Vue 节点
* @return {Promise<Place|yinObject|undefined>}
*/
run(save, story, loader) {
console.log('存档:\n', save)
console.log('故事:\n', story)
// 您可在这个过程中指定一下个场景
// 或者修改存档等做一些其他的事
// 返回场景地址
return 'Element.67866bb35671d2905199a51d'
}
}js
export default {
async run(save, story) {
// 返回场景对象
const target = await this._yin.get('Element.67866bb35671d2905199a51d')
return target
}
}js
export default {
run(save, story) {
// 什么也不返回,则继续使用目标场景 - this.target
}
}js
export default {
async run(save, story) {
// 中断事件
throw new Error('中断事件执行')
}
}存档自动保存
事件运行函数 运行成功后,故事会自动进入下一个场景,在此过程中,存档会自动保存。
动态调整
在函数运行时,this 指向事件本身,可通过直接赋值调整事件的所有参数。
js
export default {
async run(save, story) {
// 在事件数据临时存放区 _ 创建 运行次数
this._.runTime ??= 0
// 每次运行次数 +1
this._.runTime++
// 在点击时将按钮名改为 不要点我 +运行次数
this._title = `不要点我 +${this._.runTime}`
// 字体大小默认设置为21 系统会自动加上 px 单位
this.fontSize ??= 21
// 每次运行字体大小 +1 号
this.fontSize++
// 并中断事件继续运行 并在控制台报错
throw new Error(`别点了 +${this._.runTime}`)
}
}同时可通过 this._.$EventLoader 获取到当前事件在 Vue 中的 事件加载器, this._.VNode 获取到 事件实例。
事件加载器 决定了事件的外在行为,例如:样式、显示情况等。
事件实例 决定了事件的内在行为,如控制逻辑等。
js
export default {
/**
* 是否显示事件 - 当前存档是否显示该事件
*
* @param {object} save 存档 - 故事存档
* @param {object} story 故事 - 故事对象,可进行提示,弹窗等对故事进行修改操作
* @param {object} loader 加载器 - 事件加载器的 Vue 节点
* @return {Promise<Boolean>}
*/
async show(save, story, loader) {
const eventLoader = this._.$EventLoader,
event = this._.VNode
console.log(this._.$EventLoader === loader)
// true
}
}