Project1

标题: 对话框跟随角色 =-= 改进中(已适配 YEP_MessageCore ) [打印本页]

作者: garfeng    时间: 2015-12-12 02:58
标题: 对话框跟随角色 =-= 改进中(已适配 YEP_MessageCore )
本帖最后由 garfeng 于 2016-9-19 23:31 编辑

不支持1.3版本,不支持1.3版本,奇怪的bug,请勿使用!







代码下载地址:http://pan.baidu.com/s/1pJVMRl5

不知道是不是大家都选择使用YEP_messageCore,现出一个针对它的优化版本,具体请看注释。
  1. //=============================================================================
  2. //fuki.js
  3. //=============================================================================
  4. /**
  5. * @Author:      Garfeng Gu
  6. * @Email:       [email protected]
  7. * @CreateTime:  2015-12-12 21:44:12
  8. * @LastModified:2015-12-16 20:18:19

  9. * @Description: 呼出对话框 for RPG Maker MV
  10. *               在使用时,添加[文本显示],填写\fuki[eventId]正文内容,即可在游
  11. *               戏里将对话框定位到相应角色上方,eventId设为0时,对应主角。
  12. *               如:\fuki[1]你好,阿尔西斯。
  13. *               强烈推荐使用下方页面的自动换行脚本:
  14. *               https://rpg.blue/thread-386230-1-1.html
  15. *               本代码已适配YEP_Message,使用方法请参考下方对应函数处的注释。

  16. * @License:     No part of this source code could be used for commercial/business
  17. *               purpose without the express written permission of Garfeng Gu.
  18. */



  19. /*没有使用YEP_MessageCore则删掉本行
  20. //没有使用YEP_MessageCore的童鞋请将这一段的注释删掉
  21. Window_Message.prototype.startMessage = function()
  22. {
  23.     this._textState = {};
  24.     this._textState.index = 0;
  25.     var text = this.convertEscapeCharacters($gameMessage.allText());
  26.     text = this.getFukiId(text);
  27.     this._textState.text = text;
  28.     this.newPage(this._textState);
  29.     this.updatePlacement();
  30.     this.updateBackground();
  31.     this.open();
  32. }
  33. 没有使用YEP_MessageCore则删掉本行*/

  34. /*
  35. //使用了YEP_MessageCore的童鞋请把YEP_MessageCore里的
  36. //Window_Message.prototype.adjustWindowSettings
  37. //和Window_Message.prototype.convertEscapeCharacters做如下修改。
  38. Window_Message.prototype.adjustWindowSettings = function() {
  39.     if(this.setfuki == undefined || this.setfuki == 0){ //Add by Garfeng Gu
  40.         this.width = this.windowWidth();
  41.         this.height = Math.min(this.windowHeight(), Graphics.boxHeight);
  42.         if (Math.abs(Graphics.boxHeight - this.height) < this.lineHeight()) {
  43.             this.height = Graphics.boxHeight;
  44.         }
  45.         this.createContents();
  46.         this.x = (Graphics.boxWidth - this.width) / 2;
  47.     }//Add by Garfeng Gu
  48. };

  49. Window_Message.prototype.convertEscapeCharacters = function(text) {
  50.     text = Window_Base.prototype.convertEscapeCharacters.call(this, text);
  51.     text = this.getFukiId(text);//Add by Garfeng Gu
  52.     text = this.convertNameBox(text);
  53.     text = this.convertMessageCharacters(text);
  54.     return text;
  55. };
  56. */

  57. Window_Message.prototype.updatePlacement = function() {
  58.     if(this.setfuki == undefined || this.setfuki==0){
  59.     this._positionType = $gameMessage.positionType();
  60.     this.y = this._positionType * (Graphics.boxHeight - this.height) / 2;
  61.     this._goldWindow.y = this.y > 0 ? 0 : Graphics.boxHeight - this._goldWindow.height;
  62. }
  63. };

  64. Window_Message.prototype.getFukiId = function(text)
  65. {
  66.     //fuki
  67.     var eventid = -1;
  68.     text = text.replace(/\x1bFUKI\[(\d+)\]/gi,function(){
  69.         eventid = arguments[1];
  70.         return "";
  71.     });
  72.     if(eventid>=0){
  73.         this.fukiPalcement(eventid);
  74.     }
  75.     else
  76.     {
  77.         this.setfuki = 0;
  78.     }

  79.     return text;
  80. };


  81. Window_Message.prototype.fukiPalcement = function (eventid)
  82. {

  83.         var idx,idy;
  84.         if(eventid!=0){
  85.             idx = $gameMap._events[eventid]._x;
  86.             idy = $gameMap._events[eventid]._y;
  87.         }
  88.         else
  89.         {
  90.             idx = $gamePlayer._x;
  91.             idy = $gamePlayer._y;
  92.         }



  93.         idx = $gameMap.adjustX(idx);
  94.         idy = $gameMap.adjustY(idy);

  95.         var width = this.windowWidth()/2;
  96.         var height = this.windowHeight();
  97.         var x = idx*48 + 24 - width/2;//
  98.         var y = idy*48 - 24 - height;

  99.         
  100.         if(x+width>Graphics.boxWidth) x = (Graphics.boxWidth - width);
  101.         else if(x<0) x = 0;


  102.         if(y+height>Graphics.boxHeight) y = Graphics.boxHeight - height;

  103.         else if(y<0) y=0;

  104.         this.width = width;
  105.         this.height = height;
  106.         this.x = x;
  107.         this.y = y;
  108.         this.setfuki = 1;
  109. };

  110. //=============================================================================
  111. //End of File: fuki.js
  112. //2015-12-16 20:29:07
  113. //=============================================================================
复制代码

作者: mengjing    时间: 2015-12-12 11:45
这个可以给NPC那样显示么
作者: 西姐    时间: 2015-12-12 13:39
可以和显示人物名称的自带插件一起使用么
作者: binarycake    时间: 2015-12-12 13:54
这个赞~~~
作者: garfeng    时间: 2015-12-15 01:20

借楼发个图……
更新手动置顶~
作者: np5jx61    时间: 2015-12-15 09:28
garfeng 发表于 2015-12-15 01:20
借楼发个图……
更新手动置顶~

{:2_269:}大神你上传一下代码下载被,你这个复制完了之后就乱套了,,,,
作者: summer依恋    时间: 2016-3-6 12:03
没怎么懂呢、、
使用了YEP_MessageCore是不是只需要改成这样?本js也不用放到plugins里



作者: king    时间: 2016-3-10 22:37


是怎么使用的? 无论我怎么设置,都没有效果,还是默认的……我没使用YEP那个插件
作者: 343088152    时间: 2016-11-2 15:34
lz lz 还在吗?请问我只用了这个插件,怎么没效果啊{:8_458:}
直接复制了你的范例 也没效果 ..24-38是整段删掉吧?
我没用YEP
作者: ypkkjt    时间: 2016-11-8 01:52
感谢楼主分享




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