Project1

标题: (已解决)如何阻止在使用$gameMessage.add时事件继续执行? [打印本页]

作者: 未命名    时间: 2016-10-30 05:14
标题: (已解决)如何阻止在使用$gameMessage.add时事件继续执行?
本帖最后由 未命名 于 2016-10-30 11:33 编辑

我想制作由变量来控制内容的对话,所以使用事件脚本$gameMessage.add来显示文章。

但是在使用时发现其和直接用事件显示文章不一样,它会显示文章之后继续执行下面的命令,而用事件则会等到按下确定键后才继续。
即使使用$gameMessage.newPage();也只是让加入的对话分成两页,但不能停止它继续执行。

例如:

上图中,出现对话框“点点滴滴”的同时也会显示图片,而显示对话框“22222222”之后才会显示另一张图片。

我想请教下如何解决这个问题,让使用$gameMessage.add的对话也能等待按下确定键消失后才继续执行下面的命令?
作者: 百里_飞柳    时间: 2016-10-30 09:59
本帖最后由 百里_飞柳 于 2016-10-30 10:16 编辑

在add后面加上这一句看看 setWaitMode('message');
咳,其实我还不知道JGSS的结构,你可以对照着默认脚本试试
JAVASCRIPT 代码复制
  1. // Show Text
  2. Game_Interpreter.prototype.command101 = function() {
  3.     if (!$gameMessage.isBusy()) {
  4.         $gameMessage.setFaceImage(this._params[0], this._params[1]);
  5.         $gameMessage.setBackground(this._params[2]);
  6.         $gameMessage.setPositionType(this._params[3]);
  7.         while (this.nextEventCode() === 401) {  // Text data
  8.             this._index++;
  9.             $gameMessage.add(this.currentCommand().parameters[0]);
  10.         }
  11.         switch (this.nextEventCode()) {
  12.         case 102:  // Show Choices
  13.             this._index++;
  14.             this.setupChoices(this.currentCommand().parameters);
  15.             break;
  16.         case 103:  // Input Number
  17.             this._index++;
  18.             this.setupNumInput(this.currentCommand().parameters);
  19.             break;
  20.         case 104:  // Select Item
  21.             this._index++;
  22.             this.setupItemChoice(this.currentCommand().parameters);
  23.             break;
  24.         }
  25.         this._index++;
  26.         this.setWaitMode('message');
  27.     }
  28.     return false;
  29. };

作者: 未命名    时间: 2016-10-30 11:21
本帖最后由 未命名 于 2016-10-30 11:30 编辑
百里_飞柳 发表于 2016-10-30 09:59
在add后面加上这一句看看 setWaitMode('message');
咳,其实我还不知道JGSS的结构,你可以对照着默认脚本试 ...


感谢指点!

虽然直接使用setWaitMode('message');或$gameMessage.setWaitMode('message');会出现“undefined is not function”。
但我找到了setWaitMode的函数,又发现了_waitMode和$gameMessage.isBusy(),最后找到了updateWaitMode函数。
只要让updateWaitMode返回$gameMessage.isBusy()就好。

终于我发现在使用$gameMessage.add的前或后加上:
  1. Game_Interpreter.prototype.updateWaitMode(Game_Interpreter.prototype.setWaitMode(this._waitMode = 'message'));
复制代码

就可以了,虽然暂时不知道有什么副作用。

再次感谢指点!
@余烬之中  希望认可2楼【百里_飞柳】,谢谢。
我似乎不会@人……




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1