设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 5848|回复: 12
打印 上一主题 下一主题

[有事请教] [已解决]实现用键盘打开/关闭更多菜单

[复制链接]

Lv3.寻梦者

梦石
0
星屑
3657
在线时间
1133 小时
注册时间
2017-4-6
帖子
278

开拓者

跳转到指定楼层
1
发表于 2019-4-4 05:33:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 夏的66rpg 于 2019-4-5 22:06 编辑

我知道YEP_KeyboardConfig可以实现打开/关闭菜单,但是如果我想实现Q键,打开/关闭任务列表,I键打开/关闭物品窗口就没办法实现了,有什么插件可以搞定吗?

10L正解

Lv4.逐梦者

梦石
0
星屑
17938
在线时间
2162 小时
注册时间
2015-7-4
帖子
918
2
发表于 2019-4-4 21:56:37 | 只看该作者
YEP有个按键调用公共事件插件,你将要执行的脚本写到公共事件里面就好了。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3657
在线时间
1133 小时
注册时间
2017-4-6
帖子
278

开拓者

3
 楼主| 发表于 2019-4-4 23:46:43 | 只看该作者
Fan723 发表于 2019-4-4 21:56
YEP有个按键调用公共事件插件,你将要执行的脚本写到公共事件里面就好了。 ...

嗯,我只知道打开窗口的脚本,不会关闭窗口,而且就算知道了,也没办法做到用一个按键打开关闭
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
17938
在线时间
2162 小时
注册时间
2015-7-4
帖子
918
4
发表于 2019-4-5 10:04:54 | 只看该作者
关闭界面的指令是:
SceneManager.pop();

你可以用两个按键控制开关,如果非要用同一个也可以,
用条件分歧判断界面分开执行内容,条件分歧第四页输入脚本:
SceneManager._scene.constructor == Scene_Map;
这个是判断是否为地图界面,条件达成则执行进入菜单(你知道的脚本),
条件未达成则执行上面的关闭界面指令。
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
32044
在线时间
5082 小时
注册时间
2012-11-19
帖子
4877

开拓者

5
发表于 2019-4-5 13:28:57 | 只看该作者
以前想做ARPG时做过这个功能,剔出来后是下面这样:
  1. //====================================================================================================================
  2. ;var XdRsData = XdRsData || {};
  3. //====================================================================================================================
  4. // 下面添加快捷键与对应的场景。格式: 键盘键值:场景名
  5. XdRsData.options = {
  6.     73:Scene_Item,
  7.     85:Scene_Equip
  8. };
  9. //====================================================================================================================
  10. XdRsData.optionsKeys = Object.keys(XdRsData.options);
  11. XdRsData.optionsKeys.forEach(function(key){ Input.keyMapper[key] = 'shortcutKey' + key; });
  12. //====================================================================================================================
  13. Scene_Base.prototype.isSceneMap = function() {
  14.     return this.constructor === Scene_Map;
  15. };
  16. Scene_Base.prototype.isLeisure = function() {
  17.     return this.isActive() && this.isReady() && !this.isBusy();
  18. };
  19. Scene_Base.prototype.selfShortcutKey = function() {
  20.     return XdRsData.optionsKeys.filter(this.isSelfShortcutKey.bind(this)).shift();
  21. };
  22. Scene_Base.prototype.isSelfShortcutKey = function(key) {
  23.     return XdRsData.options[key] === this.constructor;
  24. };
  25. XdRsData.optionsSBupdate = Scene_Base.prototype.update;
  26. Scene_Base.prototype.update = function() {
  27.     XdRsData.optionsSBupdate.call(this);
  28.     this.updateShortcutKeyExit();
  29. };
  30. Scene_Base.prototype.updateShortcutKeyExit = function() {
  31.     if (this.isSceneMap() || !this.isLeisure()) return;
  32.     var key = this.selfShortcutKey();
  33.     if (key && Input.isTriggered('shortcutKey' + key)){
  34.         SoundManager.playCancel();
  35.         this.popScene();
  36.     }
  37. };
  38. //====================================================================================================================
  39. XdRsData.optionsSMupdateScene = Scene_Map.prototype.updateScene;
  40. Scene_Map.prototype.updateScene = function() {
  41.     XdRsData.optionsSMupdateScene.call(this);
  42.     !SceneManager.isSceneChanging() && this.updateKeyboardShortcuts();
  43. };
  44. Scene_Map.prototype.updateKeyboardShortcuts = function() {
  45.     for (var i=0;i<XdRsData.optionsKeys.length;i++) {
  46.         var key = XdRsData.optionsKeys[i];
  47.         if (Input.isTriggered('shortcutKey' + key) && XdRsData.options[key] !== this.constructor) {
  48.             SoundManager.playOk();
  49.             SceneManager.push(XdRsData.options[key]);
  50.         }
  51.     }
  52. };
  53. //====================================================================================================================
复制代码


在代码里面设置更多的场景,需要注意的是:
1, 如果 Input 本身以前含有某个键值, 如果再设置相同的键值,以前的键位会被替换并无效。
2, 脚本排除了 地图场景 ,设置地图场景的快捷键开/闭无效。
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3657
在线时间
1133 小时
注册时间
2017-4-6
帖子
278

开拓者

6
 楼主| 发表于 2019-4-5 13:30:15 | 只看该作者
芯☆淡茹水 发表于 2019-4-5 13:28
以前想做ARPG时做过这个功能,剔出来后是下面这样:

嗯~非常感谢!
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3657
在线时间
1133 小时
注册时间
2017-4-6
帖子
278

开拓者

7
 楼主| 发表于 2019-4-5 13:31:09 | 只看该作者
Fan723 发表于 2019-4-5 10:04
关闭界面的指令是:
SceneManager.pop();

嗯,好的,我试试,我就是不知道怎么判断呢,谢谢!
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3657
在线时间
1133 小时
注册时间
2017-4-6
帖子
278

开拓者

8
 楼主| 发表于 2019-4-5 14:35:17 | 只看该作者
芯☆淡茹水 发表于 2019-4-5 13:28
以前想做ARPG时做过这个功能,剔出来后是下面这样:


XdRsData.options = {
    73:Scene_Item,
    85:Scene_Equip
};
只用自己设置这里面的内容吗?我实验了几次,好像进游戏后没有效果呢

点评

照格式加啊,那两个 i 键物品界面; u键装备界面。 照格式和键值随意加就行了。  发表于 2019-4-5 16:06
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3657
在线时间
1133 小时
注册时间
2017-4-6
帖子
278

开拓者

9
 楼主| 发表于 2019-4-5 14:54:08 | 只看该作者
Fan723 发表于 2019-4-5 10:04
关闭界面的指令是:
SceneManager.pop();

好像无法做到这一点,因为YEP_KeyboardConfig貌似只能在地图界面调用公共事件....

点评

是哦!YEP的不行试别的吧,按键调用公共事件应该不止一个。不过既然在菜单里面按Esc就能退出,干吗还要重设按键呢?  发表于 2019-4-5 16:52
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
32044
在线时间
5082 小时
注册时间
2012-11-19
帖子
4877

开拓者

10
发表于 2019-4-5 20:43:28 | 只看该作者
本帖最后由 芯☆淡茹水 于 2019-4-5 20:48 编辑

上边的遗漏了一个比较大的问题,角色在不能移动时也能打开界面。
因为放太久了,自己都快忘了。

至于设置,就依照格式添加在脚本里就行了。 键盘键值可以百度(十进制), 至于对应的场景, 就写这个场景的 代码名 ,
比如想把 T 键设置为 任务界面 的快捷键, 比如 任务界面 代码名 为 Scene_Task , 键盘T键 十进制键值为 84 ,
那么就在设置的地方往下再加上去:

XdRsData.options = {
    73:Scene_Item,
    85:Scene_Equip,
    84:Scene_Task
};

想不要哪条也可以随意删,。

JAVASCRIPT 代码复制
  1. //====================================================================================================================
  2. ;var XdRsData = XdRsData || {};
  3. //====================================================================================================================
  4. // 下面添加快捷键与对应的场景。格式: 键盘键值:场景名
  5. XdRsData.options = {
  6.     73:Scene_Item,
  7.     85:Scene_Equip
  8. };
  9. //====================================================================================================================
  10. XdRsData.optionsKeys = Object.keys(XdRsData.options);
  11. XdRsData.optionsKeys.forEach(function(key){ Input.keyMapper[key] = 'shortcutKey' + key; });
  12. //====================================================================================================================
  13. Scene_Base.prototype.isSceneMap = function() {
  14.     return this.constructor === Scene_Map;
  15. };
  16. Scene_Base.prototype.isLeisure = function() {
  17.     return this.isActive() && this.isReady() && !this.isBusy();
  18. };
  19. Scene_Base.prototype.selfShortcutKey = function() {
  20.     return XdRsData.optionsKeys.filter(this.isSelfShortcutKey.bind(this)).shift();
  21. };
  22. Scene_Base.prototype.isSelfShortcutKey = function(key) {
  23.     return XdRsData.options[key] === this.constructor;
  24. };
  25. XdRsData.optionsSBupdate = Scene_Base.prototype.update;
  26. Scene_Base.prototype.update = function() {
  27.     XdRsData.optionsSBupdate.call(this);
  28.     this.updateShortcutKeyExit();
  29. };
  30. Scene_Base.prototype.updateShortcutKeyExit = function() {
  31.     if (this.isSceneMap() || !this.isLeisure()) return;
  32.     var key = this.selfShortcutKey();
  33.     if (key && Input.isTriggered('shortcutKey' + key)){
  34.         SoundManager.playCancel();
  35.         this.popScene();
  36.     }
  37. };
  38. //====================================================================================================================
  39. XdRsData.optionsSMupdateScene = Scene_Map.prototype.updateScene;
  40. Scene_Map.prototype.updateScene = function() {
  41.     XdRsData.optionsSMupdateScene.call(this);
  42.     this.canOperateShortcutKey() && this.updateKeyboardShortcuts();
  43. };
  44. Scene_Map.prototype.updateKeyboardShortcuts = function() {
  45.     for (var i=0;i<XdRsData.optionsKeys.length;i++) {
  46.         var key = XdRsData.optionsKeys[i];
  47.         if (this.isShortcutKeyOperated(key)) {
  48.             SoundManager.playOk();
  49.             SceneManager.push(XdRsData.options[key]);
  50.         }
  51.     }
  52. };
  53. Scene_Map.prototype.canOperateShortcutKey = function() {
  54.     if (SceneManager.isSceneChanging()) return false;
  55.     return $gamePlayer.canMove();
  56. };
  57. Scene_Map.prototype.isShortcutKeyOperated = function(key) {
  58.     if (XdRsData.options[key] === this.constructor) return false;
  59.     return Input.isTriggered('shortcutKey' + key);
  60. };
  61. //====================================================================================================================

评分

参与人数 1+1 收起 理由
白嫩白嫩的 + 1 精品文章

查看全部评分

xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-11 00:49

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表