Project1

标题: 如何利用脚本居中显示对话? [打印本页]

作者: Q_Lucky    时间: 2017-5-28 17:15
标题: 如何利用脚本居中显示对话?
本帖最后由 Q_Lucky 于 2017-5-28 17:18 编辑

如题。
希望实现文字水平居中且垂直居中
感觉应该是:
文字的x坐标=对话框宽度-文字长度/2
文字的y坐标=对话框高度/2
But but but 我不会js
作者: fux2    时间: 2017-5-28 18:21
显示文字的时候,窗口位置选择中间,然后第一行留空,第二行写内容就可以了。
作者: Q_Lucky    时间: 2017-5-28 21:05
fux2 发表于 2017-5-28 18:21
显示文字的时候,窗口位置选择中间,然后第一行留空,第二行写内容就可以了。 ...

嗯……这样行是行,可是不够精确,而且如果频繁使用的话加上转意符号会很麻烦
我希望能够有算法能够解决这个问题,毕竟脚本本身就是用来解决一类问题的
何况html5本身就有文本居中功能呢
作者: mr24970985    时间: 2017-5-28 21:48


來源:【心得】小小的文字工具, 文字置中
作者: Q_Lucky    时间: 2017-5-28 22:15
mr24970985 发表于 2017-5-28 21:48
來源:【心得】小小的文字工具, 文字置中

哦呀
谢谢啦
作者: tseyik    时间: 2017-5-30 00:02

  1. /*:ja
  2. * @plugindesc メッセージボックスの文字を中央揃い、右揃いにするプラグインです。
  3. * @author 村人A
  4. *
  5. * @help
  6. *
  7. * メッセージ内で指定の行の冒頭で「\#」で中央揃い、[\_]で右揃いにします。
  8. * ex)メッセージ入力時
  9. *
  10. * ここはデフォルト(左揃い)
  11. * \#ここは中央ぞろい
  12. * \_ここは右揃い
  13. * ここはデフォルト(左揃い)
  14. *
  15. * となります。
  16. *
  17. * 拡大・縮小文字を揃えたい場合はや「\#」や「\_」の前に指定特殊文字「\{」や「\}」を
  18. * 入力してください。
  19. * ex)メッセージ入力時
  20. *
  21. * ここはデフォルト(左揃い)
  22. * \{\#ここは一段階大きな文字を中央ぞろい
  23. * \}}\_ここは一段階小さい文字を右揃い
  24. * ここは一段階小さい文字を左揃い
  25. *
  26. */

  27. (function() {
  28.         var _Window_Base_initialize = Window_Base.prototype.initialize;
  29.         Window_Base.prototype.initialize = function(x, y, width, height) {
  30.                 _Window_Base_initialize.call(this, x, y, width, height);
  31.                 this.villaA_paddingleft = 0;
  32.                 this.villaA_procLine = 0;
  33.         }
  34.        
  35.         Window_Base.prototype.obtainEscapeCode = function(textState) {
  36.                 textState.index++;
  37.                 var regExp = /^[\$\.\|\^!><\{\}\\\#\_]|^[A-Z]+/i;
  38.                 var arr = regExp.exec(textState.text.slice(textState.index));
  39.                 if (arr) {
  40.                         textState.index += arr[0].length;
  41.                         return arr[0].toUpperCase();
  42.                 } else {
  43.                         return '';
  44.                 }
  45.         };

  46.         Window_Message.prototype.processEscapeCharacter = function(code, textState) {
  47.                 switch (code) {
  48.                 case ':
  49.                         this._goldWindow.open();
  50.                         break;
  51.                 case '.':
  52.                         this.startWait(15);
  53.                         break;
  54.                 case '|':
  55.                         this.startWait(60);
  56.                         break;
  57.                 case '!':
  58.                         this.startPause();
  59.                         break;
  60.                 case '>':
  61.                         this._lineShowFast = true;
  62.                         break;
  63.                 case '<':
  64.                         this._lineShowFast = false;
  65.                         break;
  66.                 case '^':
  67.                         this._pauseSkip = true;
  68.                         break;
  69.                 case '\#':
  70.                         var linelenght = textState.text.split(/\r\n|\r|\n/)
  71.                         this.villaA_paddingleft = (this.width - this.textWidth(linelenght[this.villaA_procLine]) - this.newLineX())/2;
  72.                         break;
  73.                 case '\_':
  74.                         var linelenght = textState.text.split(/\r\n|\r|\n/)
  75.                         this.villaA_paddingleft = this.width - this.textWidth(linelenght[this.villaA_procLine]) - 20 - this.newLineX();
  76.                         break;
  77.                 default:
  78.                         Window_Base.prototype.processEscapeCharacter.call(this, code, textState);
  79.                         break;
  80.                 }
  81.         };

  82.         Window_Base.prototype.processCharacter = function(textState) {
  83.                 switch (textState.text[textState.index]) {
  84.                 case '\n':
  85.                         this.processNewLine(textState);
  86.                         this.villaA_procLine++;
  87.                         break;
  88.                 case '\f':
  89.                         this.processNewPage(textState);
  90.                         break;
  91.                 case '\x1b':
  92.                         this.processEscapeCharacter(this.obtainEscapeCode(textState), textState);
  93.                         break;
  94.                 default:
  95.                         this.processNormalCharacter(textState);
  96.                         break;
  97.                 }
  98.         };


  99.         Window_Base.prototype.processNormalCharacter = function(textState) {
  100.                 var c = textState.text[textState.index++];
  101.                 var w = this.textWidth(c);
  102.                 this.contents.drawText(c, textState.x+this.villaA_paddingleft, textState.y, w * 2, textState.height);
  103.                 textState.x += w;
  104.         };

  105.         var _Window_Base_processNewLine = Window_Base.prototype.processNewLine
  106.         Window_Base.prototype.processNewLine = function(textState) {
  107.                 _Window_Base_processNewLine.call(this, textState);
  108.                 this.villaA_paddingleft = 0;

  109.         };

  110.         var _Window_Message_startMessage = Window_Message.prototype.startMessage
  111.         Window_Message.prototype.startMessage = function() {
  112.                         _Window_Message_startMessage.call(this);
  113.                         this.villaA_procLine = 0;
  114.         }
  115. })();
复制代码

作者: Q_Lucky    时间: 2017-6-4 02:31
tseyik 发表于 2017-5-30 00:02

嗯 谢谢 虽然我暂时还看不懂
等我把js学完了再回来研读一下




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