WebgalParser.parse 是否会立即执行各行对应的 gameScript #499
-
我看到 intro 函数里有 而在 startGame -> nextSentence 里,直接调用了 还有个疑问,这样如果有多行 intro,是不是 intro 会被执行多次,这样每个都会监听到事件,导致混乱? 如果 https://docs.openwebgal.com/tech/#%E5%87%86%E5%A4%87%E9%98%B6%E6%AE%B5-%E6%AD%A5%E8%BF%9B%E5%89%8D%E6%93%8D%E4%BD%9C 能指出是在哪个函数里有这些逻辑就好了 |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 1 reply
-
“而在 startGame -> nextSentence 里,直接调用了 WebGAL.events.userInteractNext.emit() 发送事件,这说明 intro 应该是在此之前就执行了” 错误的,intro 只有在游戏里有 intro 脚本且运行到该脚本才执行。这里的事件监听只是为了让 intro 可以在用户点击鼠标的时候提前显示下一行而已。 你会这样猜测是因为你认为事件监听一定在事件发出之前,所以 intro 执行一定在 nextSentence 执行之前。但实际上 nextSentence 函数,也是用户点击鼠标的回调。这个函数被称为“步进”,在用户点击鼠标,点击开始游戏,或者某些脚本执行完后,都有可能执行,并非只会执行一次。所以,在满足用户点击鼠标后可以让 intro 显示下一行这个功能的场景下,该事件回调只需在 intro 指令执行的时候注册即可,没有任何问题。 |
Beta Was this translation helpful? Give feedback.
“而在 startGame -> nextSentence 里,直接调用了 WebGAL.events.userInteractNext.emit() 发送事件,这说明 intro 应该是在此之前就执行了”
错误的,intro 只有在游戏里有 intro 脚本且运行到该脚本才执行。这里的事件监听只是为了让 intro 可以在用户点击鼠标的时候提前显示下一行而已。
你会这样猜测是因为你认为事件监听一定在事件发出之前,所以 intro 执行一定在 nextSentence 执行之前。但实际上 nextSentence 函数,也是用户点击鼠标的回调。这个函数被称为“步进”,在用户点击鼠标,点击开始游戏,或者某些脚本执行完后,都有可能执行,并非只会执行一次。所以,在满足用户点击鼠标后可以让 intro 显示下一行这个功能的场景下,该事件回调只需在 intro 指令执行的时候注册即可,没有任何问题。