Project1

标题: 【MV/MZ】虚拟按键QJ-Button 【V1.7】-2022-5-28 [打印本页]

作者: 仇九    时间: 2021-9-4 19:00
标题: 【MV/MZ】虚拟按键QJ-Button 【V1.7】-2022-5-28
本帖最后由 仇九 于 2023-3-3 13:50 编辑

请移步新版:
https://rpg.blue/thread-492610-1-1.html

=============================================================
虚拟按键QJ-Button.js [V1.7]
=============================================================
我在2022.2.16号那天更新了好多次,现在的版本很稳定了。
但是我甚至都不知道我为什么要更新orz。
=============================================================
一年前我想将我的游戏移植到手机上,但是一直没有找到合适的虚拟按键插件。
要么是无法在手机上将按键显示在屏幕外,要么就是自由度不够。要么缺这种功能,要么缺那种功能。
我有一次找到了一个非常棒的插件但是我找插件原作者(国内)付费请他增加一点功能(我当时还不咋会写插件)结果被他冷冷地劝退了。
之后我在帮我的一个朋友将某个mv游戏移植到手机上时写了这个插件,之后我公开了这个插件(最初的名字是叫Nobi-Button,nobi是一个姓,就是日文“野比”)。
因为用的人好像多了起来所以我加了许多功能。(有些功能甚至是为某个用途单独做的)
=============================================================
本来我做了游戏运行时修改按键大小的功能,想同时加上修改按键位置等的功能,但是好像这个功能没有太大的必要,没有人主动提过,在手机上自适应位置已经够了。
=============================================================
*====================================
*1.支持开关控制和场景显示。
*  显示条件分为三种:a.额外脚本显示设置 b开关显示设置. c.场景显示设置
*  只有这三个都为true时按键才会显示。
*
*2.自适应手机窗口,可使用bw,bh,w,h,sx,sw,sy进行设计。
*  在手机上时w和h读取的是手机《整个屏幕大小》。
*  在电脑上时w和h读取的是游戏窗口大小(package.json中指定)。
*  bw和bh读取的是按钮的绝对大小,这个大小会随着按键的缩放率,按键整体的缩放率进行自动调整。
*  sw和sh代表游戏画面的宽度和高度。
*  sx代表游戏画面的x坐标,等效于(w-sw)/2
*
*3.在游戏菜单的“选项”一栏可以对选项进行调节。
*
*4.方向键中的圆可作为摇杆进行拖动。
*  也可以直接点击方向键进行移动,且可适配八方移动。
*
*5.支持多点触控。
*
*6.需要将按键图片放入img/button下。
*
*7.禁用鼠标/手指点击移动的脚本指令:QJ.B.setMove(false);
*  启用鼠标/手指点击移动的脚本指令:QJ.B.setMove(true);
*
*8.禁用鼠标右键/双指的脚本指令:QJ.B.setTwo(false);
*  启用鼠标右键/双指的脚本指令:QJ.B.setTwo(true);
*
*9.修改按键大小,位置和不透明度可以用指令:
*  QJ.B.setButton(id,scale,x,y,opacity);
*  其中:
*  id代表在插件参数中指定的按钮名称。
*  scale代表大小。
*  x和y代表位置,既可以写数字,也可以用bw,w,bh,h等,注意加上半角(英文)引号。
*  opacity代表不透明度,范围为0-255。
*
*10.“是否记忆按键设置”:不记忆的话,每次载入存档后,使用QJ.B.setButton修改的指令和玩家在设置中
*  设置的按键大小将进行重置。
*
*11.方向键中有一个值叫直线移动角度,此值只在八方移动中有效。
*  若此值为15,则按键相对中心的角度为-15~15中时只会向上移动而不会向左上或者右上移动。
*
*12.按键选项中的“按钮”的意思是:
*  按下此虚拟按键相当于按下键盘上的某按钮,但是按下键盘上的此按钮不代表着按下此虚拟按键。
*
*13.使用此插件时,若要扩展按键使用,建议使用Q-S.T.写的Add Input.js这个按键扩展插件。
*  可以直接使用D本插件的Demo中附带的那个Add Input.js插件,我修改了此插件的说明,更易理解和使用。
*
*14.有时我们想在现实文本时,暂时自动隐藏按钮,则可以打开“显示文本时隐藏”选项。
*  打开后,在显示文本时,按钮就会自动隐藏。
*  为了避免连续文本显示时按钮的闪现,在由“显示文本”至“不显示文本”这一段期间内,按钮会延迟10帧才出现,此功能不会影响什么,单纯防止了按钮闪现。
*
*15.特殊模式:
*  一般情况下,我们在加密游戏时对按键图片也会加密,使用RMMV原生的读取文件的方式便可正常读取。在不加密时,也可以使用RMMV原生的读取文件的方式
*  来正常读取按键图片。
*
*  但有时我们需要做移植工作,其他图片加密,而按键图片不加密,且可能此工程的加密秘钥我们无法得知,无法以与其他图片同样的秘钥或者加密方式
*  来加密按键图片。此时使用RMMV原生的读取文件的方式时,读取图片就会出错,因为默认情况下还是会按那个秘钥来解析图片。
*
*  此时我们便需要打开这个模式(在右方的插件参数中),来使用浏览器原生的方式来正常读取未加密的图片,而不是使用原生的方式。
*====================================
=============================================================
截图:



=============================================================
下载地址:
链接:https://pan.baidu.com/s/1WEvVD39LPrXiJeCsPAoDkA
提取码:9999
=============================================================

作者: RyanYe    时间: 2021-9-4 20:04
这个和Galv_ScreenButtons相比有哪些优势或者不同点呢?
作者: 仇九    时间: 2021-9-4 20:28
RyanYe 发表于 2021-9-4 20:04
这个和Galv_ScreenButtons相比有哪些优势或者不同点呢?

呃……要对比一下的话……
我刚下了Galv的那个插件。然后突然想起来我最开始给自己的游戏写这种插件的时候(一年前我刚学还啥也不会的时候)就是同时参考了
站内某大佬的按键脚本和Galv等人的按键脚本。
好的地方有:
1.手机端上:按键自适应,可以显示在窗口之外。
2.摇杆,不止能按下上下左右键进行移动,也可以按住进行拖动,很方便ARPG。且可适配八方移动,进行斜向走时拖动摇杆即可。
3.可以统一设置按键大小。
4.可以让玩家在游戏运行时,对按键的大小进行整体调整。这个功能主要是为了让按键能够对不同分辨率的手机机型进行手动适配。
不同:
1.主要使用开关进行控制,可能有人不喜欢使用开关,我遇到过。我觉得对于这种插件来说,在插件参数内进行设置,将许多设置放在一起比直接用指令调用更方便。
2.这个插件在按键消失时没有淡出效果。

作者: sh2288    时间: 2021-9-7 15:03
太强了,怎么下载啊
作者: 枫の叶    时间: 2021-9-7 15:29
论坛有人发过虚拟按钮,这个有什么优势和特点?
作者: 破晓酱11    时间: 2021-9-8 18:39
4.可以屏蔽RMMV原有的“双指触控代表返回”的功能  ------ 就这个很棒啊,我之前找的虚拟按键就没有这个功能,每次按方向键+确认键就会触发这个双击返回。。。
作者: 仇九    时间: 2021-9-10 14:43
2021-9-10
插件已经发布了!
作者: sh2288    时间: 2021-9-17 14:57
强烈支持作者
作者: sh2288    时间: 2021-9-17 15:04
大佬,图片怎么整啊
作者: Sam晴天雨    时间: 2021-9-24 02:25
本帖最后由 Sam晴天雨 于 2021-9-30 01:10 编辑

素材拷贝了,运行显示cannot read property ‘button’ of null 怎么破
作者: 微笑的迪妮莎    时间: 2021-9-25 09:40
牛批
作者: Sam晴天雨    时间: 2021-9-30 01:37
上不了图啊,等级不够,我是素材弄好后打开插件就显示那串英文,屏幕左下角可以看到方向和摇杆,其他按键看不到
作者: ww984957002    时间: 2021-9-30 10:34
太棒了!!自适应?!就是按键大小会随着屏幕大小改变?
作者: ww984957002    时间: 2021-9-30 11:35
怎么关闭按键和显示按键?我用变量哪里设置 没效果
作者: QuinnHi    时间: 2021-10-19 16:39
您好,遇到了与10楼一样的问题,
我将图片素材button文件夹导入了工程,
并使用了js,但是显示cannot read property ‘button’ of null,
请问要如何解决呢~
作者: 仇九    时间: 2021-10-19 23:06
QuinnHi 发表于 2021-10-19 16:39
您好,遇到了与10楼一样的问题,
我将图片素材button文件夹导入了工程,
并使用了js,但是显示cannot read  ...

我无法复现这个问题……我将js文件投入空工程/MOG合集中没有复现这个BUG,放在部分我的工程里也没有出现。如果需要这个插件的话,那就在QQ(975866141)什么的地方联系我然后你仔细说一下你使用的插件,我看看到底是哪里冲突,顺便帮我找出这个BUG的原因。感谢。
作者: xiaolou010    时间: 2021-11-1 10:50
感谢楼主,支持一下。
作者: 入坑小萌新    时间: 2021-11-29 12:39
大佬问一下,为什么设计场景为false,开关才生效,这样每次打开菜单如果有不需要显示按钮还得先关闭开关
作者: 冰星翼    时间: 2021-11-29 14:41
感谢大佬的插件
作者: winred101    时间: 2021-12-2 12:46
本帖最后由 winred101 于 2021-12-5 10:17 编辑
破晓酱11 发表于 2021-9-8 18:39
4.可以屏蔽RMMV原有的“双指触控代表返回”的功能  ------ 就这个很棒啊,我之前找的虚拟按键就没有这个功 ...


你说的是不是yanfly大神的插件?我一开始也是这样,后来发现可以把插件选项里的enable touch move改为true就行了

之前忘了抱歉,还要加个插件指令DisableTouchMove
作者: 被遗忘的角落    时间: 2021-12-3 02:54
本帖最后由 被遗忘的角落 于 2021-12-3 02:59 编辑

仇九大佬,这个插件有个小BUG(应该是),我把你的范例原封不动打包到手机试了下,第一次进游戏正常,第二次以及之后按钮就没了,要在标题设置里点一下按钮设置才会出现。
https://www.lanzouw.com/iJLYfx5zftc
密码:3bh7
这个是打包好的你的范例APP
打打包时忘记去权限了,装的话会要几个权限

作者: winred101    时间: 2021-12-5 10:43
我打开八方移动的插件,实际键盘是可以斜向移动了,但虚拟按键不论我怎么拖动摇杆还是没办法做到八方移动呀,请问要怎么弄,还有回覆下楼上,报错的应该是和其他插件互冲了,我把这插件放上面一点就解决了,还有就是读档也会报错,不过只要重新开始游戏或者在游戏里读档就不会报错。
作者: 天浩    时间: 2021-12-8 12:53
在电脑上运行正常,打包到手机上就显示不出来了。
作者: 997212131    时间: 2022-1-8 19:32
谢谢大佬!用上了!
作者: 仇九    时间: 2022-2-19 09:55
1.5更新,顶上去。
但是我为什么要更新呢……
作者: moumou00000    时间: 2022-2-26 13:56
支持一个了,感谢分享
作者: q282626598    时间: 2022-4-1 19:40
大佬 你虚拟按键插件。。MV游戏在按F4全屏的时候会导致位置错乱。。
作者: 7479958    时间: 2022-5-27 10:47
是个好东西,不过在手机上那个按钮位置始终调整不好
作者: 仇九    时间: 2022-5-27 21:27
7479958 发表于 2022-5-27 10:47
是个好东西,不过在手机上那个按钮位置始终调整不好

你有使用转移字符吗?
插件说明的第二点:


*2.自适应手机窗口,可使用bw,bh,w,h,sx,sw,sy进行设计。
*  在手机上时w和h读取的是手机《整个屏幕大小》。
*  在电脑上时w和h读取的是游戏窗口大小(package.json中指定)。
*  bw和bh读取的是按钮的绝对大小,这个大小会随着按键的缩放率,按键整体的缩放率进行自动调整。
*  sw和sh代表游戏画面的宽度和高度。
*  sx代表游戏画面的x坐标,等效于(w-sw)/2


这个插件最主要的就是在手机上使用,且在手机上时按钮能显示在游戏画面之外。
手机长度一般大于游戏画面长度,所以游戏在手机上运行时,游戏画面的左右边与手机的左右边之间会显示黑色的画面,在这一部分显示虚拟按键恰好可以保证虚拟按键(手指)不遮挡游戏画面。

比如你想在手机的右上角显示一个按钮(不是游戏画面的右上角),按钮的锚点一般是按钮的左上角,所以这个按钮的x坐标应该写w-bw,意思就是按钮的左上角的坐标应该是“手机的宽度减去按键的宽度”。
不要写具体数字,因为不同手机的分辨率不一样,使用转移字符能够自己适配,使用具体的数字就没法适配。。
作者: 7479958    时间: 2022-5-28 00:23
能否用w-2bw
作者: 佳哥RPG    时间: 2022-5-28 08:04
这个虚拟按键非常好用,但是我要反应一个问题,电脑上操作设置了对应键盘按键无效的情况。可能是我还没有搞懂,二一个是进入某些场景会黑屏,比如GALV钓鱼插件。这个应该是进入某些场景会出现黑屏的缘故。只显示摇杆的图片,在钓鱼场景里面是黑的
作者: 仇九    时间: 2022-5-28 10:33
佳哥RPG 发表于 2022-5-28 08:04
这个虚拟按键非常好用,但是我要反应一个问题,电脑上操作设置了对应键盘按键无效的情况。可能是我还没有搞 ...

我更新了,你看看更新后有没有问题。
“脑上操作设置了对应键盘按键无效的情况”这种情况应该就是设置问题,如果你有用修改了按键键码的插件的话就得注意。
“进入某些场景会黑屏”这我1不知道什么意思,我刚才测试了一下新版1.7没问题。

作者: testevil    时间: 2022-6-17 18:16
很好,谢谢分享!

作者: 蟀呆鸟    时间: 2022-6-18 00:14
感谢分享,支持支持
作者: shuiyu    时间: 2022-6-21 12:54
老哥 为啥添加其他按钮之后会报错呀  不加就不报错(最新版本的 之前版本的添加没有报错  同一个游戏)
作者: 仇九    时间: 2022-6-21 13:46
shuiyu 发表于 2022-6-21 12:54
老哥 为啥添加其他按钮之后会报错呀  不加就不报错(最新版本的 之前版本的添加没有报错  同一个游戏){:4_ ...

报的什么错?至少得有个截图啊。
(更新了新版后旧的存档不能再用)
作者: Salyzzz    时间: 2022-6-26 13:39
貌似判定按钮出现的条件有些奇怪
插件代码里的这个地方
  1. NBDirButton.prototype.judge = function() {
  2.     let boo = true;
  3.     if (this.Data.switchScript.length>0) {
  4.         boo = boo&&(!!eval(eval(this.Data.switchScript)));
  5.     }
  6.     if (this.Data.switch>0) {
  7.         boo = boo&&($gameSwitches.value(this.Data.switch));
  8.     }
  9.     if (this.Data.textHide) {
  10.         let ts = $gameMessage.isBusy();
  11.         if (ts) {
  12.             this.textShowDelay = 10;
  13.             boo = false;
  14.         } else if (this.textShowDelay>0) {
  15.             this.textShowDelay--;
  16.             boo = false;
  17.         } else boo = true;
  18.     }
  19.     if (SceneManager._scene) {
  20.         if (this.Data["showOn"+SceneManager._scene.constructor.name.toString()]) {
  21.             boo=boo&&!!eval(this.Data["showOn"+SceneManager._scene.constructor.name.toString()]);
  22.         } else {
  23.             boo=boo&&defaultSceneShow
  24.         }
  25.     } else {
  26.         boo=boo&&defaultSceneShow
  27.     }
  28.     return boo;
  29. };
复制代码

关于this.Data.textHide的判断,里面的else boo = true会不会导致,只要不符合前两个条件就显示,导致前面对脚本和开关的判断无效,从而不能做到全true的时候才能显示
此外,貌似对于this.Data.switchScript.length>0的判断,在插件设置里写了代码,全部删除后会留下一个"",并且把他放到eval里也会返回false,长度也为1,导致即使没写代码也会误判
也可能都是我自己的原因...总感觉关于对话框是否繁忙和脚本内容这两部分的出现条件有些奇怪
作者: shuiyu    时间: 2022-7-22 14:53
感谢大佬分享的插件  能否加一些功能 比如 按键 控制显示和隐藏功能 按键位置 大小透明度的调整
作者: RPG筱咲工作室    时间: 2022-8-7 16:08
为什么模拟Q键和E键无效?
作者: a2327153    时间: 2022-8-18 17:41
楼主你的插件非常好用,可以显示在手机屏幕外,现在有个问题就是如何能够不设置包含数字的XY轴实现下方的布局,因为设置数字的话有可能分辨率不一样就会很变扭

图片传不了我去,我描述一下,就是方向键在左下角这个已经设置没问题,Z键在右下角设置也没问题,

就剩一个三道杠的键(菜单键),我想让它在右下角Z键的上方,和Z键同一竖行这样,但是又不会遮挡
这个怎么设置楼主能解答下吗(因为菜单键比Z小一点点不太好调)
作者: a2327153    时间: 2022-8-18 17:44
a2327153 发表于 2022-8-18 17:41
楼主你的插件非常好用,可以显示在手机屏幕外,现在有个问题就是如何能够不设置包含数字的XY轴实现下方的布 ...

不要右上角的这种布局 就是在Z键上面一点点就行
作者: 347780682    时间: 2022-9-5 04:37
谢谢分享
作者: 红十字    时间: 2022-9-5 06:31
谢谢大佬分享  
作者: Sam晴天雨    时间: 2022-10-19 19:01
Sam晴天雨 发表于 2021-9-24 02:25
素材拷贝了,运行显示cannot read property ‘button’ of null 怎么破

之前是mv用了出错,可能跟别的插件冲突了吧,现在换mz使用刚好,问题也有,使用开关打开那个选项基本无效,对应的开关打不打开都不影响按键显示,还有按键停留问题,假如设定了地图显示,菜单不显示,商店显示的情况,你去了商店出来按键就会停留在地图,打开菜单按键消失了,地图上的按键也消失了,想要按键又得去商店,主要还是开关没有用,如果有用就不需要设置什么地图其他的显示不显示的问题了
作者: qq983378065    时间: 2023-1-13 10:14
Salyzzz 发表于 2022-6-26 13:39
貌似判定按钮出现的条件有些奇怪
插件代码里的这个地方

首先感谢楼主提供的插件,这个插件功能确实很强大,目前接触过的虚拟按键里功能最强大的插件就是楼主的了,楼主确实很厉害。
然后感谢您的提示,当然我是代码小白,只能看懂if之类的简单代码,不敢说楼主的代码有问题,不过把else boo = true注释掉后确实解决了我遇到的问题。
我用一个开关设置了虚拟按键的打开关闭,测试后可以正常的打开关闭虚拟按键,但是之后我又设置了显示文本隐藏虚拟按键,之前设置的开关就不起作用了。然后按照您的提示把else boo = true注释掉后功能就正常了,能够正常的用开关设置虚拟按键的开启关闭,也能够自动在显示文本时隐藏。
作者: kw102631    时间: 2023-1-17 13:41
很强大 很好用 继续制作插件哟 亲
作者: 小海藤    时间: 2023-1-18 16:44
有没有大佬用MZ的,禁用标题场景了,进游戏还是会闪一下
作者: woliebe    时间: 2023-1-20 18:05
谢谢分享,可以自己设定虚拟按键图片是马?

作者: jienluck    时间: 2023-1-20 20:06
谢谢分享
作者: h昨夜星辰    时间: 2023-2-22 13:45
Salyzzz 发表于 2022-6-26 13:39
貌似判定按钮出现的条件有些奇怪
插件代码里的这个地方

我就是,经常出现
TypeError
Cannot read property length' of undefined
的错误




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