Skip to content

事件

引.故事 中,我们为场景添加事件,并通过激活不同的事件指向不同的场景,以此串联多线故事。 在这个过程中,我们通过给事件增加脚本,来为整个故事增加过程控制。

其他对象

引.故事 中,可绑定脚本的对象不只有事件,但所有其他对象的脚本都是根据事件改编而来。

代码提示

通过编辑器生成脚本文件自带 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

    }
}