Project1

标题: 使用道具效果是弹出图片,应该怎么做? [打印本页]

作者: asukalin    时间: 2022-11-4 00:10
标题: 使用道具效果是弹出图片,应该怎么做?
本帖最后由 asukalin 于 2022-11-4 00:24 编辑

大概是想要这样的效果:



在菜单里点击道具使用



会弹出图片


现在道具的使用效果是启动公共事件,在公共事件里打开图片

但这样做,图片出来时菜单就关闭了
上面截图也看得出,菜单打开的时候地图是模糊的
图片出来后地图就清晰了
表示菜单已经关闭了,地图上的NPC都在随便乱走

我想在图片弹出时让菜单还留在底下不要关闭,该怎么做呢?

作者: bleen    时间: 2022-11-4 02:03
我之前有过类似的需要,然后找到了一个插件,姑且是放在附件了。

这个插件的作用就是,允许你在物品菜单和技能菜单下执行公共事件时不关闭菜单本身,没有汉化,可以用百度翻译来理解插件说明,应该问题不大,效果本身是可以解决问题的。

但是......它非常容易和其他插件冲突,需要你反复调整插件顺序来回避这一点,而且有些插件可能不管怎么调都没用,也就是兼容性很差,具体就看你的运气了。我记得还有一个问题来着,不过忘记是什么了

最后我评估了一下用它的风险,还是选择了不要这个效果。你可以自己尝试,但凡可以妥协或者其他大佬有别的办法来实现,我都不太建议你用这个。

FTKR_MenuEvent.rar (5.67 KB, 下载次数: 9)

作者: asukalin    时间: 2022-11-4 12:20
bleen 发表于 2022-11-4 02:03
我之前有过类似的需要,然后找到了一个插件,姑且是放在附件了。

这个插件的作用就是,允许你在物品菜单和 ...

下载之后被Windows报告病毒,屏蔽了

作者: loveinyou200    时间: 2022-11-4 17:03
本帖最后由 loveinyou200 于 2022-11-4 17:12 编辑

执行的公共事件里,执行图片显示后加一个文本显示,哪怕是空文本也行,只要文本没按键确认,地图事件就不会行动,因为还在执行公共事件。
文本之后,加上清除图片的指令,另外再加上一个脚本:SceneManager.push(Scene_Item)
这样,确定掉文本后,就直接回到了道具页面,这样的达成了你的要求。

演示一下效果:

建立一个公共事件,脚本内容如图。(“Actor1_3”替换成你要展示的图片名)


建立相应的道具,关联该公共事件

然后进游戏进行测试


使用所需要展示图片的道具


使用后展示图片及没有文字的文本框,这样所有事件都处于非运转状态


确认文本后,画面回到道具界面

这是最简便的执行方案,由于MV系统自带的图片显示功能只能在大地图上实现,所以在不动用其他插件的情况下,这样是最符合你要求的执行手段。

如果非要在菜单栏中展示图片,相对比较复杂。
1、安装魔改的图片图钉插件“Drill_PictureThumbtack.js”;
2、建立一个公共事件,用该插件的插件指令来展示对应的图片;
3、到系统的“rpg_scenes.js”文件里,找到以下字段:
Scene_ItemBase.prototype.checkCommonEvent = function() {
    if ($gameTemp.isCommonEventReserved()) {
        SceneManager.goto(Scene_Map);
    }
};
把其中的“SceneManager.goto(Scene_Map);”这一段脚本删除,这样物品使用公共事件的时候,就不会跳到大地图了。

把以上3步操作完毕,你就可以实现在原先的状态下展示图片了。

但这样操作会有一些后遗症:1、其他道具使用公共事件也就不会跳转到大地图了;2、图片图钉还需要一个事后指令来关闭(可以放在刷新大地图的指令里);3、虽然魔改的插件兼容性还是非常强的,但不排除与一些图片展示的插件冲突。所以这套方案并不推荐,个人建议用方案一最合适。
作者: asukalin    时间: 2022-11-4 20:40
本帖最后由 asukalin 于 2022-11-4 21:54 编辑
loveinyou200 发表于 2022-11-4 17:03
执行的公共事件里,执行图片显示后加一个文本显示,哪怕是空文本也行,只要文本没按键确认,地图事件就不会 ...


试了第一个方法,地图上的人物还是在到处乱走
(公共事件的触发条件是选了“无”)


之前我也试过用SceneManager.push(Scene_Item),清除图片后会显示道具菜单,只可惜这时候在道具菜单按取消键会直接转到大地图。如果是转到主菜单就好了。

后来试了在SceneManager.push(Scene_Item)后面加一行SceneManager.push(Scene_Menu)可以转到主菜单。
……但还是行不通,来回重复点几次,主菜单大地图道具菜单几个界面就乱了。


接下来我再试试那个插件吧。
作者: cenhangkai    时间: 2022-11-6 14:57
asukalin 发表于 2022-11-4 20:40
试了第一个方法,地图上的人物还是在到处乱走
(公共事件的触发条件是选了“无”)
  1. /*:
  2. * @plugindesc v1.0 物品栏使用道具显示图片
  3. * @author CHK
  4. *
  5. * @help
  6. * 【救命!】
  7. * ① 请在道具的备注栏备注:<显示图片:图片名字,x轴,y轴>
  8. * 例子1:<显示图片:aoteman,250,250>
  9. * 例子2:<显示图片:aoteman,250>  不填写Y轴,默认0
  10. * 例子3:<显示图片:aoteman>  不填写X轴、Y轴,默认0
  11. * ② 请把备注的图片放在 img/pictures 的文件夹里面!
  12. * ③ 确定键/返回键/鼠标右键 可以关闭图片。
  13. *
  14. *
  15. * @param ---图片设定---
  16. * @default
  17. *
  18. * @param 显示黑色背景
  19. * @desc 在图片的背后再显示一层黑色背景,清空就不显示,默认显示
  20. * @default 显示
  21. *
  22. * @param 操作提示文字
  23. * @desc 在图片下方显示操作文字,清空就不显示,默认:确定键/返回键关闭
  24. * @default 确定键/返回键关闭
  25. *
  26. * @param 文字对齐方式
  27. * @desc [底下居中]填写:底下居中。[上头居中]填写:上头居中。默认[底下居中]
  28. * @default 底下居中
  29. *
  30. * @param 文字字号大小
  31. * @desc 默认:24
  32. * @default 24
  33. *
  34. * @param 文字X轴偏移
  35. * @desc 操作文字的X轴偏移移动,默认0
  36. * @default 0
  37. *
  38. * @param 文字Y轴偏移
  39. * @desc 操作文字的X轴偏移移动,默认0
  40. * @default 0
  41. *
  42. *
  43. *
  44. *
  45. * @param ---声音设定---
  46. * @default
  47. *
  48. * @param 打开图片时的声音
  49. * @type file
  50. * @dir audio/se/
  51. * @desc 请确保游戏中有该se声音文件。清空就不播放声音。默认Book2
  52. * @default Book2
  53. *
  54. * @param 打开声音的音量
  55. * @desc 默认90
  56. * @default 90
  57. *
  58. * @param 打开声音的加速
  59. * @desc 默认100
  60. * @default 100
  61. *
  62. *
  63. * @param 关闭图片时的声音
  64. * @type file
  65. * @dir audio/se/
  66. * @desc 请确保游戏中有该se声音文件。清空就不播放声音。默认Cancel1
  67. * @default Cancel1
  68. *
  69. * @param 关闭声音的音量
  70. * @desc 默认90
  71. * @default 90
  72. *
  73. * @param 关闭声音的加速
  74. * @desc 默认100
  75. * @default 100
  76. */

  77. (function() {

  78. var parameters = PluginManager.parameters('CHK_ItemTuPian');
  79. var BJKG = String(parameters['显示黑色背景'])=='显示'?true:false;
  80. var BJtext = String(parameters['操作提示文字'] || '');
  81. var DQFS = String(parameters['文字对齐方式'] || '');
  82. var BJtextZH = Number(parameters['文字字号大小'] || 24);
  83. var BJtextX = Number(parameters['文字X轴偏移'] || 0);
  84. var BJtextY = Number(parameters['文字Y轴偏移'] || 0);

  85. var name1 = String(parameters['打开图片时的声音']);
  86. var se1 = name1?{"name":name1,"volume":Number(parameters['打开声音的音量']||90),"pitch":Number(parameters['打开声音的加速']||100),"pan":0}:'';
  87. var name2 = String(parameters['关闭图片时的声音']);
  88. var se2 = name2?{"name":name2,"volume":Number(parameters['关闭声音的音量']||90),"pitch":Number(parameters['关闭声音的加速']||100),"pan":0}:'';


  89. var _sscene_Item_onItemOk = Scene_Item.prototype.onItemOk;
  90. Scene_Item.prototype.onItemOk = function() {
  91.     _sscene_Item_onItemOk.call(this);
  92.     if (this.item().meta.显示图片) {
  93.                 this._HeiPing = new Sprite(new Bitmap(Graphics.width,Graphics.height));
  94.                 this.addChild(this._HeiPing);
  95.                 var contents = this._HeiPing.bitmap;
  96.                 if (BJKG) {
  97.                         contents.paintOpacity = 155;
  98.                         contents.fillRect(0, 0, contents.width, contents.height, '#000000');
  99.                         contents.paintOpacity = 255;
  100.                 };
  101.                 if (BJtext) {
  102.                         contents.fontSize = BJtextZH;
  103.                         var y = DQFS=='上头居中'?BJtextZH+4:contents.height-BJtextZH-4;
  104.                         contents.drawText(BJtext, BJtextX, y+BJtextY, Graphics.width, BJtextZH, 'center');
  105.                 };
  106.                 var List = this.item().meta.显示图片;
  107.                 this._itemTP = List.split(',').length?List.split(',')[0]:List;
  108.                 this._itemTPx = List.split(',').length>1?Number(List.split(',')[1]):0;
  109.                 this._itemTPy = List.split(',').length>2?Number(List.split(',')[2]):0;
  110.                 this._itemTPJL = new Sprite(ImageManager.loadPicture(this._itemTP));
  111.                 this._itemTPJL.opacity = 0;
  112.                 this.addChild(this._itemTPJL);
  113.                 this._itemWindow.deactivate();
  114.                 this._iWait = 30;
  115.                 this._iKG = true;
  116.         };
  117. };
  118. var _sscene_Item_playSeForItem = Scene_Item.prototype.playSeForItem;
  119. Scene_Item.prototype.playSeForItem = function() {
  120.         if (se1 && this.item().meta.显示图片) {
  121.                 AudioManager.playSe(se1);
  122.         } else {
  123.                 _sscene_Item_playSeForItem.call(this);
  124.         };
  125. };
  126. var _sscene_Item_update = Scene_Item.prototype.update;
  127. Scene_Item.prototype.update = function() {
  128.         _sscene_Item_update.call(this);
  129.         if (this._itemTPJL) {
  130.                 this._itemTPJL.x = (Graphics.width-this._itemTPJL.width) / 2 + this._itemTPx;
  131.                 this._itemTPJL.y = (Graphics.height-this._itemTPJL.height) / 2 + this._itemTPy;
  132.                 if (this._iKG && this._itemTPJL.opacity<255) {
  133.                         this._itemTPJL.opacity += 16;
  134.                         if (this._itemTPJL.opacity>=255) this._iKG = false;
  135.                 };
  136.                 if (this._iWait > 0) {
  137.                         this._iWait--;
  138.                 } else {
  139.                         if (!this._iKG2 && (Input.isPressed('ok') || Input.isPressed('escape') || TouchInput.isCancelled())) {
  140.                                 if (se2) AudioManager.playSe(se2);
  141.                                 this._iKG2 = true;
  142.                         };
  143.                         if (this._iKG2) this._itemTPJL.opacity -= 32;
  144.                         if (this._iKG2 && this._itemTPJL.opacity<=0) {
  145.                                 this.removeChild(this._itemTPJL);
  146.                                 this._itemTPJL = null;
  147.                                 if (this._HeiPing) {
  148.                                         this.removeChild(this._HeiPing);
  149.                                         this._HeiPing = null;
  150.                                 };
  151.                                 this._itemWindow.activate();
  152.                                 this._iKG2 = false;
  153.                         }
  154.                 };
  155.                 if (this._HeiPing) this._HeiPing.opacity = this._itemTPJL.opacity;
  156.         };
  157. };

  158. })();
复制代码


————————————————————————————
【使用方法:把上述代码复制新建1个插件中,取名:CHK_ItemTuPian】
随手写的,希望对楼主有所帮助,有BUG的话回复我即可。

作者: asukalin    时间: 2022-11-6 23:00
cenhangkai 发表于 2022-11-6 14:57
————————————————————————————
【使用方法:把上述代码复制新建1个插件中 ...

太厉害了!完美符合我的需要!

试了几遍,没有BUG,甚至在对话事件进行中“打开菜单画面”里选择使用道具也能正常打开图片正常关闭图片。我装的插件比较少,所以不大清楚和其他插件兼容情况。

署名就署CHK_ItemTuPian(作者CHK)可以吗?
作者: cenhangkai    时间: 2022-11-7 02:51
asukalin 发表于 2022-11-6 23:00
太厉害了!完美符合我的需要!

试了几遍,没有BUG,甚至在对话事件进行中“打开菜单画面”里选择使用道 ...

有用就行,署名随您喜好。




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