rpgmaker全部按键都可以拿来使用的脚本
rpgmaker吧
全部回复
仅看楼主
level 8
之前我发了-----通过事件指令的脚本来实现的全键盘功能【rpgmaker吧】-----这个帖子
但是这个帖子说的好像是按下按键之后会连续执行,而不是按下之后只执行一次。
这个好像是Input.isPressed 和 Input.isRepeated 、 Input.isTriggered 甚至是Input.isLongPressed 这类的问题。
有兴趣的可以到developer点rpgmakerweb点com/rpg-maker-mz/Input.html这里使用浏览器翻译成中文后看一看。
也是类似于虚幻引擎的操作映射和轴映射这里的问题。
也就是说,在游戏里,通常人物的移动是按下按键之后就需要持续执行的轴映射,
人物的跳跃是按一次就执行一次的操作映射。
[吐舌]
于是,前段时间我又到文心一言那里去叫它写脚本。只是,今天我才有闲心发这个帖子。
它这次写的脚本好像是按下的时候检测一次,按键弹起来的时候也检测一次,
打开开关和关闭开关好像可以控制调用事件页或公共事件来执行指令,好像也可以重置按键按下和弹起的检测。
[吐舌]
let isQKeyTriggered = false; // 标记Q键是否被触发
// 监听keydown事件
window.addEventListener('keydown', function(event) {
// 将event.key转换为小写,然后进行比较
if (event.key.toLowerCase() === 'q' && !isQKeyTriggered) { // 只在Q键被按下且未被触发时执行
// 检查111号开关是否关闭
if (!$gameSwitches.value(111)) {
isQKeyTriggered = true; // 标记Q键为已触发
// 执行事件指令
$gameMessage.add("你按下了Q键");
// 打开111号开关
$gameSwitches.setValue(111, true);
}
}
});
// 监听keyup事件
window.addEventListener('keyup', function(event) {
// 仍然将event.key转换为小写进行比较
if (event.key.toLowerCase() === 'q' && isQKeyTriggered) { // 只在Q键被释放且已触发时执行
isQKeyTriggered = false; // 标记Q键为未触发
// 关闭111号开关,无论它之前的状态是什么
$gameSwitches.setValue(111, false);
}
});
[吐舌]
上面这段是按下Q键的,想要哪个按键再复制一个,把Q和'q'替换一下就可以了。
引号里的Q好像是要小写才能起作用。
而且好像还是大小写的时候都可以正常检测到。
上面这个截图就不一样了,这个截图好像是只有在小写状态下才能检测到,
要写让大写状态下检测到的话,就要把'q'这里的q改成Q。
按理来说,这个脚本好像太不方便了,根本就没有存在的必要。
但是仔细一想的话,或许要检测玩家输入文字内容的时候,这种区分大小写的特性就刚好用得上了。
配合上输入文字的111_InputForm.js和MZ版的111_InputFormMZ.js
输入记录器 - InputRecorder.js、密码输入 - PasswordInput.js、MNKR 演员姓名随机更改 - MNKR_RandomActorNameMV.js、敌人名称输入屏幕显示 - MKR_InputEnemyName.js这几个插件也可以去试一试。
[吐舌]
以上的这些,写到MZ版的脚本那里是可以的,因为MZ版的脚本框可以上下拉伸。
MV版的话,由于脚本框的大小有一个限制。
或许就需要把注释和空行给删除掉,或许还需要文心一言来简化或再次切分一个完整的脚本为两个需要配合的脚本了。。又或者是可以考虑一下写到插件那里去。
[吐舌]
以下的这些,是把按键都集合到一起的,想要什么按键起作用就把哪个按键都写进去。。。好像也需要各自配合一个专属的开关给它。
要是觉得这个麻烦的话,可以去找一找输入键扩展 - MpiInputEx.js这个插件。
通过插件发布网站指向的插件下载页面,可以看到好像是2017年就发布了。但可能是这个插件有什么问题,好像是取消掉下载的点击框了。
[吐舌]
// 创建一个对象来跟踪按键状态
const pressedKeys = {};
// 监听keydown事件
window.addEventListener('keydown', function(event) {
// 将event.key转换为小写,以便进行不区分大小写的比较
const key = event.key.toLowerCase();
// 检查按键是否已经被按下
if (!pressedKeys[key]) {
// 如果按键没有被按下,则设置它为已按下
pressedKeys[key] = true;
// 根据按键执行不同的操作
switch (key) {
case 'q':
// 检查111号开关是否关闭
if (!$gameSwitches.value(111)) {
// 执行事件指令
$gameParty.gainGold(100);
$gameMessage.add("你按下了Q键,增加100金币");
// 打开111号开关
$gameSwitches.setValue(111, true);
}
break;
case 'w':
// 对于W键的处理逻辑...
break;
case 'e':
// 对于E键的处理逻辑...
break;
case 'r':
// 对于R键的处理逻辑...
break;
// ... 可以继续添加其他按键的处理逻辑
}
}
});
// 监听keyup事件
window.addEventListener('keyup', function(event) {
// 将event.key转换为小写,以便进行不区分大小写的比较
const key = event.key.toLowerCase();
// 检查按键是否已经被按下(即它是否在pressedKeys中存在)
if (pressedKeys[key]) {
// 如果按键被按下,则设置它为未按下
pressedKeys[key] = false;
// 根据按键执行释放时的操作(如果需要的话)
switch (key) {
case 'q':
SceneManager.push(Scene_Save)
// 例如,关闭111号开关(无论它之前的状态是什么)
$gameSwitches.setValue(111, false);
break;
case 'w':
// 对于W键在释放时的处理逻辑...
break;
case 'e':
// 对于E键在释放时的处理逻辑...
break;
case 'r':
// 对于R键在释放时的处理逻辑...
break;
// ... 可以继续添加其他按键在释放时的处理逻辑
}
}
});
[吐舌]
有兴趣去测试上面这段脚本的话,
可能会因为$gameMessage.add("你按下了Q键,增加100金币"); 遇到显示框文本框,SceneManager.push(Scene_Save)跳出存档界面之后,
后面会再一次的跳出文本框,这可能是因为没有点击右键、手动发出结束文本框的指令。
这应该是正常的,并不是这个脚本有问题。(我之所以加上跳出存档界面,是因为除了按下按键之后触发,还因为检测到弹起之后也可以触发。。这提供了更多的可选项、更多的自定义空间。。说不定还可以检测到按下几帧之后再触发,检测到弹起几帧之后再触发也是可以看一下有没有这个需求的。)
我还在Q键这里加入了$gameParty.gainGold(100);这个脚本,你可以到菜单界面那里去查看增加的金币是没有差错的。
为了更方便的测试,你可以使用LL_VariableWindow.js这个插件来实时的检测效果。像下面这样的设置,把脚本里的对话框删掉,再来测试会更直观看到效果。
◆插件指令:LL_VariableWindow, 显示窗口
:    :窗口编号 = 1
:    :変数 = 1
:    :X座標 = 408
:    :Y座標 = 60
:    :横幅 = 400
◆变量操作:#0001 查看金币的变量 = 金币
2024年05月06日 18点05分 1
level 1
刚用rpg makerMV,想请教一下...怎么显示怪物血量啊[泪](还有魔塔怪物数字血量又如何显示)
2024年06月06日 02点06分 2
搜索------速战 rpgmaker -----,或者是----rpgmaker 状态插件---rpgmaker 敌人血量-----rpgmaker 战斗----。
2024年06月11日 00点06分
level 1
有没有简单一点的方法(学生没什么时间学脚本代码.....[泪]
2024年06月06日 02点06分 3
level 1
(上面忘说了,这里再问一下;有没有教rpg makerMV脚本的地方?虽然没什么时间,但是想了解一下,似乎好多地方都需要...)[乖],(还有...弱弱的问一句,有没有地方分享符合rpg maker样式的素材,想换一下默认素材[乖]
2024年06月06日 03点06分 4
level 8
新手到B站搜索----rpgmaker 教学----可以找到入门教程,
搜索------rpgmaker 插件----可以找到很多介绍、讲解插件的视频。
[吐舌]
写给萌新的超简单事件脚本指南 - RPG Maker MV 讨论区
非常好的脚本调用手册 - RPG Maker MV 讨论区
【RMMV】事件脚本整合,第三次更新,更方便在网页上查看 - RPG Maker MV 讨论区
ツクールMZスクリプトリファレンスwiki
RpgMakerMZ/MV脚本基础教学合集_哔哩哔哩
上面前第一到第四个网页都可能会网速不太好,网速好一点的时候,耐心等待一下还是可以打开的。。。这些都可以使用搜索引擎搜到,MV版和MZ版的脚本好像都是通用的。
[吐舌]
plugin点fungamemake
rpgmakerofficial点com/product/mz/plugin/
rpgmakerweb点com/blog/rpg-maker-mz-plugin-list
到这三个网页去找插件,和学习插件制作,以及去找发布插件的网站。
还可以到软件文件夹(下载的软件在软件文件夹、新建工程在工程文件夹、打包的游戏在游戏文件夹)的RPG Maker MV\dlc这个文件夹这里找插件,
尤其是这里的KadokawaPlugins、KadokawaPlugins_New、BaseResource、RPGmakerWeb_plugins这些文件夹,
可能在里面还包含plugins、launch、official这些专门放插件的文件夹。
(总之就是rpgmaker的公司可能管理比较混乱,插件到处都是,这里可能会找到,那里也可能会找到。。。就连----rpgmakerofficial点com-----rpgmakerweb点com----这两个好像都是他们的官方网站,好像一个是发行公司的,一个是研发公司的,而且还不在软件上把网站列出来。)
[吐舌]
rpg云书
rpg民族
projertj1
江湖梦网
torigoya点hatenadiary点jp
www点rpgchina点net(吐槽:这个网站一开始应该是一个建站新手做的,logo那里的名字叫做幻想森林,在网站名那里的标题却是-----论坛----这两个字(可能是建站系统默认的,新手不知道这是要去改的),导致搜索效果很不好,现在就将错就错了。。。而且还经历过把.com后缀改成.net后缀,这样乱搞导致SEO(搜索引擎优化)非常的不好,好像只能手动输入域名。。。但是里面的内容是真的全面和丰富,20年专一rpgmaker的老网站了,网速也很好。)
上面这几个网站好像都有专门的素材板块,还可以到下面这个网页去找DLC(浏览器翻译成中文,找到后记住英文名,再到steam去等打折)。
pgmakerofficial点com/product/makerofficialdlc/en/
[吐舌]
由于百度不怎么收录外面的网站,而把服务器放在国内的网站需要备案审核。
所以,搜索外面的网站和小众的网站(小众的网站哪有那么多的耐心去搞网站的备案和审核啊),必应会比较全面。
2024年06月06日 08点06分 5
level 1
[郁闷]贴吧真是太不方便发脚本了
2024年06月10日 10点06分 7
英文太多,或者是日文太多,都可能会被贴吧谨慎的判定为可能有违规内容。
2024年06月11日 00点06分
level 8
这两天又开了一个游戏工程,发现有点问题,于是又跑到这里来看了一下。
后面又到旧工程那里去看了一下,才发现在这里好像没有说:
在公共事件那里使用这些脚本,要及时关掉开关。
[吐舌]
这里的脚本好像是用来打开开关,关闭开关比较好。
再让每个按键分配一个开关,这个开关再对应一个公共事件。
有什么要执行的指令都写在公共事件那里,最后再关闭掉这个这个公共事件的开关。
[吐舌]
由于我觉得前100号的开关、变量留着分配给100张图片比较好。
所以,101到110分配给1到10(就是0)的按键,QWERT这些从111开始分配,分配到200应该就够用了。
(搜索---键盘有多少个按键,据说有61键、86键、101键、104键、107键多种键盘。)
所以,在101号公共事件到200号公共事件的最下面都加上下面这段脚本应该就可以了。
//关闭101到200的所有开关
for (var i=101;i<=200;i++){
$gameSwitches.setValue(i,false);}
2024年08月04日 06点08分 8
level 8
由于之前可能是由于文心一言的回答有一个数字上的限制,总是没有把全部按键都写下来。
我又懒得自己去补齐,今天我再次跟它说,让他把每个按键和开关都一一对应并且补齐。
经过耐心交流,终于让它换一种方式给补齐了。。下图这样就简洁了很多。
// 创建一个对象来跟踪按键状态
const pressedKeys = {};
// 按键到开关编号的映射
const keyToSwitchMap = {
'q': 111, 'w': 112, 'e': 113, 'r': 114, 't': 115,
'y': 116, 'u': 117, 'i': 118, 'o': 119, 'p': 120,
'a': 121, 's': 122, 'd': 123, 'f': 124, 'g': 125,
'h': 126, 'j': 127, 'k': 128, 'l': 129, 'z': 130,
'x': 131, 'c': 132, 'v': 133, 'b': 134, 'n': 135,
'm': 136,
'1': 101, '2': 102, '3': 103, '4': 104, '5': 105,
'6': 106, '7': 107, '8': 108, '9': 109, '0': 110
};
// 监听keydown事件
window.addEventListener('keydown', function(event) {
const key = event.key.toLowerCase();
if (keyToSwitchMap.hasOwnProperty(key)) {
const switchNumber = keyToSwitchMap[key];
if (!pressedKeys[key]) {
pressedKeys[key] = true;
// 打开对应的开关
$gameSwitches.setValue(switchNumber, true);
// 如果需要,可以在这里添加额外的按键按下时的逻辑
// 例如,输出到控制台以确认开关已打开
console.log(`Switch ${switchNumber} turned ON by pressing ${key}`);
}
}
});
// 监听keyup事件
window.addEventListener('keyup', function(event) {
const key = event.key.toLowerCase();
if (keyToSwitchMap.hasOwnProperty(key) && pressedKeys[key]) {
const switchNumber = keyToSwitchMap[key];
pressedKeys[key] = false;
// 关闭对应的开关
$gameSwitches.setValue(switchNumber, false);
// 如果需要,可以在这里添加额外的按键释放时的逻辑
// 例如,输出到控制台以确认开关已关闭
console.log(`Switch ${switchNumber} turned OFF by releasing ${key}`);
}
});
这样,48行就搞好了。
先是按键和开关一一对应,
接着是按下按键就打开对应的开关,并且对应的开关会打开对应的公共事件,公共事件执行完毕之后再把101号开关到200号开关都关闭掉。
下面这段也是把开关关掉。(或许跟上面在公共事件中关闭开关重合了,但是这样一点的冗余代码还是挺好的,或许会稳定、可靠一点吧。。。另外,在这里就把开关关掉,好像也不会打断公共事件的执行,公共事件好像是只要开始执行了,就会把它给执行完毕,出现条件不存在了,好像也会执行完毕。好像是这样,不确定。)
2024年08月04日 15点08分 9
level 1
rpg maker mv可以做双人冒险吗?比如我1p用键盘awds移动,2p用↑↓←→移动【就像那个冰火人】,可以吗?[瀑布汗~]
2024年09月29日 07点09分 10
我在11楼给你回了一个帖子。
2024年09月29日 15点09分
回复 魔灵断水 :hat-soft.top/component_notes/RPGMakerMV/html/RPGMV速查.html#插件脚本案例编写速查---这个网页的---自定义按键映射---,先用脚本框输入Input.keyMapper[65] = "A";,然后在分支条件的脚本框输入Input.isPressed('A')就可以了。。建议Ctrl+F检索Input.isPressed。
2024年11月07日 12点11分
level 8
使用RPG maker MZ制作类似企鹅先生的小游戏_哔哩哔哩
上面这个视频有说怎么控制玩家和NPC。
虽然不等于分别控制,但那里的如果怎么样,NPC就怎么样这个思路是用得上的。
[吐舌]
RPGmakerMV在线系统——一网络游戏制作指南~_哔哩哔哩
RPGMaker简单联机功能_哔哩哔哩
RPG系列联机功能实现_哔哩哔哩
---------------------------------------------------------------------------
在在线通信中查看其他玩家 - OnlineAvatar.js
艺术家: Kuramubon
每个玩家都像在线游戏一样显示,同时显示访问该网站的人的头像。
上面这4个好像是做网络游戏、局域网的,但是太复杂,我也没有这方面的想法,我不知道。
但是你想的也不是,是同一个电脑,同一个键盘(或许是两个手柄)来操作。
[吐舌]
那就是这个帖子说的当哪个按键按下的时候,就怎么样怎么样了。
或许你可以考虑把↑↓←→换成ikjl之类的按键。
你把9楼的第二张截图拖到桌面,搜索白描网页版,把这里的代码识别出来。
喂给文心一言之后,让它把wsadikjl这八个按键以及对应的开关写出一个脚本来就可以了。
[吐舌]
就是分支条件的如果哪个开关打开,设置移动路线那里分别控制玩家和那个NPC不同的行动。
[吐舌]
为什么建议把↑↓←→替换成ikjl呢?
如果是单人左右手来玩的话,
参考-----真三国无双7操作按键 真三国无双7操作按键分享-游侠网-------
(因为我以前玩这个游戏)------就是这样才顺手的啊。
要是左手wsad,右手↑↓←→,一个手往前一个手靠后,很不习惯的。
两人来玩的话,手靠的近一点也挺好的。
[吐舌]
还有就是↑↓←→本来就是默认控制玩家的,要是让↑↓←→控制1P,wsad控制2P,也是怪怪的。
要是想让wsad控制1P,↑↓←→控制2P的话,就要先把↑↓←→的默认设置给注释掉。
37: "left", // left arrow
38: "up", // up arrow
39: "right", // right arrow
40: "down", // down arrow
98: "down", // numpad 2
100: "left", // numpad 4
102: "right", // numpad 6
104: "up", // numpad 8
好像在rmmz_core.js的上面这八行都要注释掉。
手柄的话。好像下面这四行也要注释掉。至于两个手柄的设置,我不知道。
12: "up", // D-pad up
13: "down", // D-pad down
14: "left", // D-pad left
15: "right" // D-pad right
2024年09月29日 15点09分 11
多谢,我再细细品味[阴险]
2024年09月30日 10点09分
多谢,我再细细品味[阴险]
2024年09月30日 10点09分
我按你说的把那个给文心一言了,不过....好像不能用哈....已用就报错....[汗]
2024年10月13日 10点10分
@魔灵断水 Mano_InputConfig.js、HIME_EventTriggerLabels.js、YEP_KeyboardConfig.js、HzInputCommand.js、InputRecorder.js、YEP_TouchInputDisabler.js、TouchInputDispatcher.js、MPP_SimpleTouch3.js、Mno_InputConfigMV.js、YEP_KeyNameEntry.js、use_DI_Joypad_ver_1_2.js
2024年10月13日 13点10分
level 8
键盘按键KeyCode码 键盘键码keyCode对照表 键盘按钮keyCode大全 iP138在线工具
tool.ip138.com/keycode/
好像是不区分大小写的
但是下面这个跟上面这个有点不一样
键盘键值对照表 - 在线工具栏
usetoolbar.com/table/keyboard_code_table.html
ASCII 键控代码 对比 键控代码 好像是区分大小写,但是不区分数字
[星星月亮]
今天又刷到这个帖子,觉得之前的方法太麻烦了。
【RMMV】事件脚本整合,第三次更新,更方便在网页上查看 - RPG Maker MV 讨论区 - Project1
rpg.blue/thread-403194-1-1.html
在上面这个网页上搜索Input.isPressed给出的示例才是rpgmaker代码本来就在使用的方法。
根据第一段这两个网页给出的键值,结合下面这个帖子的3楼。
条件事件无反应【rpgmaker吧】_百度贴吧
https://tieba.baidu.com/p/10040255473
[星星月亮]
在rmmz_core.js找到Input.keyMapper之后把全部按键和键值都关联起来,
好像是可以直接在原始代码这里操作,放到新插件那里,以及放到脚本框那里。
然后参考下面,直接在括号的双引号里面更改按键就可以了。
Input.isPressed("s")
Input.isPressed("pageup")
Input.isPressed("pagedown")
Input.isPressed("escape")
Input.isPressed("a")
[星星月亮]
只是上面的Input.keyMapper这个好像是只适用于键鼠,
如果游戏要在主机的手柄操作和手机的触屏操作的话,
或许需要在Input.gamepadMapper这里进行修改。
比如Joiplay和MTool之类的手机模拟器和游戏修复、翻译工具,
可能也是会根据Input.gamepadMapper这里的代码来运行的。
2025年11月05日 06点11分 12
但是在Input.keyMapper里面进行关联绑定的时候,需要放在120: "debug" // F9的上面,要是放在下面就会有SyntaxError Unexpected number这个报错了。
2025年11月05日 06点11分
1