查看: 5040|回复: 4

[交流讨论] 对话框与并行事件的奇妙纠葛(

[复制链接]

老鹰

梦石
40
星屑
37812
在线时间
7091 小时
注册时间
2012-5-26
回帖
3297

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

发表于 2020-5-14 08:52:50 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 百里_飞柳 于 2020-5-14 09:34 编辑

此帖为对RGSS3中并行事件被对话框暂停的探讨,欢迎大家阅读讨论。



首先,你写了一个非常简单的 玩家按键触发 的NPC,
其中指令如下图,是一个非常常见的含有一句对话的那种。
1.png

然后,你想要一些别的东西,比如在当前地图上时一直有个烦人精隔一段时间就叨叨逼逼一下,
便新增了如下图指令的 并行事件,其中1号变量在计数,每次显示一次就自加 1。
2.png

于是当在地图上行动时,就是这样的效果:
每在地图上空闲着1s,这个烦人精就开始逼逼,按掉后变量自加1,1s后他又来逼逼了。
3.png

然后你赶紧去找NPC搭个话
11.png
好了,现在烦人精没法逼逼了,因为对话框被占用了,他必须等到这边对话完成才能继续逼逼。

当然你很快就觉得这种时不时就自动触发的对话真的太烦人了,
于是你想改掉,换成比如随着计时而画面变色等其他特效,
之前的并行执行的事件此时变成了这样:
21.png
当然我没有加这些特效,简单点,讲话的方式简单点。

现在你进行测试。
当玩家在地图上行走时,一切正常。

但是!当玩家与NPC对话时,并行事件在执行完当前内容后,居然没有继续执行,而是被暂停了!!

明明并行事件里没有对话,为啥它还会被暂停?

这个就牵扯到了RGSS3里的一个设计思想:想尽可能确保事件能同步执行。
这从脚本中可以找到答案:
22.png
在事件的执行时,额外调用了一个 wait_for_message 方法,也就是它,阻碍了事件的再次执行。

尽管并行事件与普通执行的事件各自有一个事件解释器,它们各自执行,互不打扰,
但是在地图上时,对话框只有一个,大家都是用这一个。
因此当对话框在显示时,任何一个事件解释器的 wait_for_message 指令都会被触发,并等待直至对话框关闭。

那这个设计到底有没有意义呢?
我 也 不 知 道 呢 ~

但是这可不行,明明应该是独立的并行事件,怎么能因为对话框而停下来呢?不要停下来啊!计数的!
把 run 方法中的 wait_for_message 注释掉后,再来试试:
23.gif
现在完美啦!

PS:因为显示文本指令里已经自带了 wait_for_message 方法,因此如果并行事件中还是有显示对话的话,它依然会等待对话框关闭再继续执行、显示它的对话。

如果你不想污染默认的脚本,可以在最下面的插件脚本处新增以下的覆盖脚本,并命名为 对话框不再阻止并行事件
当然请先确保没有使用任何修改了事件解释器类的插件。
[pre lang="ruby"]class Game_Interpreter
  #--------------------------------------------------------------------------
  # ● 执行
  #--------------------------------------------------------------------------
  def run
    #wait_for_message
    while @list[@index] do
      execute_command
      @index += 1
    end
    Fiber.yield
    @fiber = nil
  end
end[/pre]

评分

参与人数 11星屑 +50 赞 +10 收起 理由
风雨流盼 + 1 塞糖
夏虫沉默 + 1 精品文章
Nil2018 + 1 精品文章
W.Q.C. + 1 不要停下来啊!
岸边鸬鹚 + 50 我很赞同
congwsbn + 1 精品文章
火锅深处 + 1 我很赞同
阵颜 + 1 来学习了
又囧又怨的炅鸢 + 1 塞糖
whitedewxiao + 1 精品文章

查看全部评分

梦石
0
星屑
2983
在线时间
299 小时
注册时间
2018-4-6
回帖
316
发表于 2020-5-14 09:21:50 | 显示全部楼层
老鹰出品,必属精品
回复

使用道具 举报

花匠

梦石
64
星屑
16710
在线时间
4205 小时
注册时间
2016-6-17
回帖
1004

极短26获奖极短24参与开拓者

发表于 2020-5-15 20:31:09 | 显示全部楼层
感谢老鹰分享~!
不用03换VA做文字游戏相关就总有各种莫名其妙的对话框问题1551
回复

使用道具 举报

梦石
0
星屑
437
在线时间
36 小时
注册时间
2017-12-4
回帖
16
发表于 2020-8-9 19:30:45 | 显示全部楼层
涨知识了
回复

使用道具 举报

梦石
0
星屑
115
在线时间
8 小时
注册时间
2021-2-3
回帖
19
发表于 2021-2-27 00:12:44 | 显示全部楼层
阿巴阿巴阿巴(吃瓜群众)
一个想玩上各位大佬做的精美像素rpg的萌新qwq
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部