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

Project1

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

[有事请教] mv有全键盘的插件吗

[复制链接]

Lv1.梦旅人

梦石
0
星屑
141
在线时间
20 小时
注册时间
2015-5-5
帖子
2
跳转到指定楼层
1
发表于 2019-2-26 14:34:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
rt 有大佬提供一个么 找了好久都没有找到

Lv5.捕梦者

梦石
0
星屑
36695
在线时间
10863 小时
注册时间
2009-3-15
帖子
4824
2
发表于 2019-2-26 15:08:25 | 只看该作者
JAVASCRIPT 代码复制
  1. //=============================================================================
  2. // MV全按鍵  版本2
  3. // 最終更新:2016/4/15
  4. //=============================================================================
  5. /*:
  6.  * @plugindesc 全按鍵,解決您按鍵不夠的煩惱
  7.  * @author Q-S.T.
  8.  *
  9.  *
  10.  * @help 說明
  11.  * <使用方法>在事件腳本或條件分歧的腳本欄使用以下語句:
  12.  *  判斷按著(Press):InputEX.isPressed(鍵碼)
  13.  *  判斷按下(Trigger):InputEX.isTriggered(鍵碼)
  14.  *  判斷長按(Repeat):InputEX.isRepeated(鍵碼)
  15.  *  判斷長按2(LongPress):InputEX.isLongPressed(鍵碼)
  16.  *
  17.  * <使用例>
  18.  *  InputEX.isPressed(13)   // 按著Enter
  19.  *  InputEX.isTriggered(71)   // 按下G鍵
  20.  *
  21.  * <其他>
  22.  *  1.長按2在預設用來做快轉事件用
  23.  *  2.腳本中附的鍵碼表供對照用
  24.  *  3.JS中ctrl、alt、shift沒分左右
  25.  *  4.判斷數字以外的字會改用預設方法
  26.  *  5.print screen(截圖鍵)無效,所以別用
  27.  *  6.Num Lock會重置按鍵判定,最好也別用
  28.  *  7.MV版本1.1.0後改成和Input關連
  29.  
  30.  */
  31.  
  32.  
  33.  
  34. // 舊方法擴充
  35. (function() {   
  36. //
  37. var _Input_initialize = Input.initialize;
  38. Input.initialize = function() {
  39.     _Input_initialize.call(this);
  40.     InputEX.initialize();
  41. };   
  42. //
  43. var _Input_update = Input.update;
  44. Input.update = function() {
  45.     _Input_update.call(this);
  46.     InputEX.update();
  47. };
  48. //
  49.  
  50.  
  51.  
  52. })();
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60. /**
  61.  * The static class that handles input data from the keyboard and gamepads.
  62.  *
  63.  * @class Input
  64.  */
  65. function InputEX() {
  66.     throw new Error('This is a static class');
  67. }
  68.  
  69. /**
  70.  * Initializes the input system.
  71.  *
  72.  * @static
  73.  * @method initialize
  74.  */
  75. InputEX.initialize = function() {
  76.     this.clear();
  77.     this._wrapNwjsAlert();
  78.     this._setupEventHandlers();
  79. };
  80.  
  81.  
  82. // 對照表
  83. InputEX.keyMapper = {
  84.     8: 'backspace',      // 倒回
  85.     9: 'tab',        
  86.     12: 'clear',         // 關Num Lock + 數字鍵5   
  87.     13: 'enter',         
  88.     16: 'shift',         
  89.     17: 'control',      
  90.     18: 'alt',           
  91.     19: 'pause',
  92.     20: 'caps lock',
  93.     27: 'esc',           
  94.     32: 'space',         
  95.     33: 'pageup',        
  96.     34: 'pagedown',      
  97.     35: 'end',
  98.     36: 'home',
  99.     37: 'left',           
  100.     38: 'up',            
  101.     39: 'right',         
  102.     40: 'down',           
  103.     44: 'print screen',   // 截圖,這個鍵無效
  104.     45: 'insert',         
  105.     46: 'del',
  106.     48: 'num 0',
  107.     49: 'num 1',
  108.     50: 'num 2',
  109.     51: 'num 3',
  110.     52: 'num 4',
  111.     53: 'num 5',
  112.     54: 'num 6',
  113.     55: 'num 7',
  114.     56: 'num 8',
  115.     57: 'num 9',
  116.     65: 'A',
  117.     66: 'B',
  118.     67: 'C',
  119.     68: 'D',
  120.     69: 'E',
  121.     70: 'F',
  122.     71: 'G',
  123.     72: 'H',
  124.     73: 'I',
  125.     74: 'J',
  126.     75: 'K',
  127.     76: 'L',
  128.     77: 'M',
  129.     78: 'N',
  130.     79: 'O',
  131.     80: 'P',
  132.     81: 'Q',      
  133.     82: 'R',
  134.     83: 'S',
  135.     84: 'T',
  136.     85: 'U',
  137.     86: 'V',
  138.     87: 'W',      
  139.     88: 'X',      
  140.     89: 'Y',
  141.     90: 'Z',      
  142.     91: 'L Win',         // 左Win(會叫出開始選單,慎用)
  143.     92: 'R Win',         // 右Win(會叫出開始選單,慎用)
  144.     93: 'select',       // 選單
  145.     96: 'numpad 0',     
  146.     97: 'numpad 1',     
  147.     98: 'numpad 2',     
  148.     99: 'numpad 3',     
  149.     100: 'numpad 4',   
  150.     101: 'numpad 5',     
  151.     102: 'numpad 6',     
  152.     103: 'numpad 7',     
  153.     104: 'numpad 8',      
  154.     105: 'numpad 9',     
  155.     106: 'numpad *',
  156.     107: 'numpad +',
  157.     109: 'numpad -',
  158.     110: 'numpad .',
  159.     111: 'numpad /',
  160.     112: 'F1',
  161.     113: 'F2',           // 被拿去呼叫FPS視窗,慎用
  162.     114: 'F3',           // 被拿去切換平鋪模式,慎用
  163.     115: 'F4',           // 被拿去視窗縮放,慎用
  164.     116: 'F5',           // 被拿去重新啟動,慎用
  165.     117: 'F6',
  166.     118: 'F7',
  167.     119: 'F8',          // F8
  168.     120: 'F9',          // F9
  169.     121: 'F10',
  170.     122: 'F11',
  171.     123: 'F12',
  172.     144: 'num lock',    // 會重置判定,慎用
  173.     145: 'scroll lock',
  174.     186: ';',
  175.     187: '=',
  176.     188: ',',
  177.     189: '-',
  178.     190: '.',
  179.     191: '/',
  180.     192: '`',
  181.     219: '[',
  182.     220: '\\',        // \鍵,寫兩個是因為會被解讀成正則
  183.     221: ']',
  184.     222: "'",        //  三個'會被誤判,改用""來包
  185. };
  186.  
  187.  
  188. /**
  189.  * The wait time of the key repeat in frames.
  190.  *
  191.  * @static
  192.  * @property keyRepeatWait
  193.  * @type Number
  194.  */
  195. InputEX.keyRepeatWait = 24;
  196.  
  197. /**
  198.  * The interval of the key repeat in frames.
  199.  *
  200.  * @static
  201.  * @property keyRepeatInterval
  202.  * @type Number
  203.  */
  204. InputEX.keyRepeatInterval = 6;
  205.  
  206.  
  207. /**
  208.  * Clears all the input data.
  209.  *
  210.  * @static
  211.  * @method clear
  212.  */
  213. InputEX.clear = function() {
  214.     this._currentState = {};
  215.     this._previousState = {};
  216.     this._latestButton = null;
  217.     this._pressedTime = 0;
  218.     this._dir4 = 0;
  219.     this._dir8 = 0;
  220.     this._preferredAxis = '';
  221.     this._date = 0;
  222. };
  223.  
  224. /**
  225.  * Updates the input data.
  226.  *
  227.  * @static
  228.  * @method update
  229.  */
  230. InputEX.update = function() {
  231.     if (this._currentState[this._latestButton]) {
  232.         this._pressedTime++;
  233.     } else {
  234.         this._latestButton = null;
  235.     }
  236.     for (var name in this._currentState) {
  237.         if (this._currentState[name] && !this._previousState[name]) {
  238.             // 轉成數字記錄
  239.             this._latestButton = parseInt(name);
  240.             this._pressedTime = 0;
  241.             this._date = Date.now();
  242.         }
  243.         this._previousState[name] = this._currentState[name];
  244.  
  245.     }
  246.     this._updateDirection();
  247. };
  248.  
  249. /**
  250.  * Checks whether a key is currently pressed down.
  251.  *
  252.  * @static
  253.  * @method isPressed
  254.  * @param {String} keyName The mapped name of the key
  255.  * @return {Boolean} True if the key is pressed
  256.  */
  257. InputEX.isPressed = function(keyName) {
  258.     return !!this._currentState[keyName];
  259. };
  260.  
  261. /**
  262.  * Checks whether a key is just pressed.
  263.  *
  264.  * @static
  265.  * @method isTriggered
  266.  * @param {String} keyName The mapped name of the key
  267.  * @return {Boolean} True if the key is triggered
  268.  */
  269. InputEX.isTriggered = function(keyName) {
  270.     return this._latestButton === keyName && this._pressedTime === 0;
  271. };
  272.  
  273. /**
  274.  * Checks whether a key is just pressed or a key repeat occurred.
  275.  *
  276.  * @static
  277.  * @method isRepeated
  278.  * @param {String} keyName The mapped name of the key
  279.  * @return {Boolean} True if the key is repeated
  280.  */
  281. InputEX.isRepeated = function(keyName) {
  282.     return (this._latestButton === keyName &&
  283.         (this._pressedTime === 0 ||
  284.             (this._pressedTime >= this.keyRepeatWait &&
  285.                 this._pressedTime % this.keyRepeatInterval === 0)));
  286. };
  287.  
  288. /**
  289.  * Checks whether a key is kept depressed.
  290.  *
  291.  * @static
  292.  * @method isLongPressed
  293.  * @param {String} keyName The mapped name of the key
  294.  * @return {Boolean} True if the key is long-pressed
  295.  */
  296. InputEX.isLongPressed = function(keyName) {
  297.     return (this._latestButton === keyName &&
  298.          this._pressedTime >= this.keyRepeatWait);
  299. };
  300.  
  301. /**
  302.  * [read-only] The four direction value as a number of the numpad, or 0 for neutral.
  303.  *
  304.  * @static
  305.  * @property dir4
  306.  * @type Number
  307.  */
  308. Object.defineProperty(InputEX, 'dir4', {
  309.     get: function() {
  310.         return this._dir4;
  311.     },
  312.     configurable: true
  313. });
  314.  
  315. /**
  316.  * [read-only] The eight direction value as a number of the numpad, or 0 for neutral.
  317.  *
  318.  * @static
  319.  * @property dir8
  320.  * @type Number
  321.  */
  322. Object.defineProperty(InputEX, 'dir8', {
  323.     get: function() {
  324.         return this._dir8;
  325.     },
  326.     configurable: true
  327. });
  328.  
  329. /**
  330.  * [read-only] The time of the last input in milliseconds.
  331.  *
  332.  * @static
  333.  * @property date
  334.  * @type Number
  335.  */
  336. Object.defineProperty(InputEX, 'date', {
  337.     get: function() {
  338.         return this._date;
  339.     },
  340.     configurable: true
  341. });
  342.  
  343. /**
  344.  * @static
  345.  * @method _wrapNwjsAlert
  346.  * @private
  347.  */
  348. InputEX._wrapNwjsAlert = function() {
  349.     if (Utils.isNwjs()) {
  350.         var _alert = window.alert;
  351.         window.alert = function() {
  352.             var gui = require('nw.gui');
  353.             var win = gui.Window.get();
  354.             _alert.apply(this, arguments);
  355.             win.focus();
  356.             InputEX.clear();
  357.         };
  358.     }
  359. };
  360.  
  361. /**
  362.  * @static
  363.  * @method _setupEventHandlers
  364.  * @private
  365.  */
  366. InputEX._setupEventHandlers = function() {
  367.     document.addEventListener('keydown', this._onKeyDown.bind(this));
  368.     document.addEventListener('keyup', this._onKeyUp.bind(this));
  369.     window.addEventListener('blur', this._onLostFocus.bind(this));
  370. };
  371.  
  372. /**
  373.  * @static
  374.  * @method _onKeyDown
  375.  * @param {KeyboardEvent} event
  376.  * @private
  377.  */
  378. InputEX._onKeyDown = function(event) {
  379.     if (this._shouldPreventDefault(event.keyCode)) {
  380.         event.preventDefault();
  381.     }
  382.     if (event.keyCode === 144) {    // Numlock
  383.         this.clear();
  384.     }
  385.     this._currentState[event.keyCode] = true;
  386.  
  387. };
  388.  
  389. /**
  390.  * @static
  391.  * @method _shouldPreventDefault
  392.  * @param {Number} keyCode
  393.  * @private
  394.  */
  395. InputEX._shouldPreventDefault = function(keyCode) {
  396.     switch (keyCode) {
  397.     case 8:     // backspace
  398.     case 33:    // pageup
  399.     case 34:    // pagedown
  400.     case 37:    // left arrow
  401.     case 38:    // up arrow
  402.     case 39:    // right arrow
  403.     case 40:    // down arrow
  404.         return true;
  405.     }
  406.     return false;
  407. };
  408.  
  409. /**
  410.  * @static
  411.  * @method _onKeyUp
  412.  * @param {KeyboardEvent} event
  413.  * @private
  414.  */
  415. InputEX._onKeyUp = function(event) {
  416.     this._currentState[event.keyCode] = false;
  417.     if (event.keyCode === 0) {  // For QtWebEngine on OS X
  418.         this.clear();
  419.     }
  420. };
  421.  
  422. /**
  423.  * @static
  424.  * @method _onLostFocus
  425.  * @private
  426.  */
  427. InputEX._onLostFocus = function() {
  428.     this.clear();
  429. };
  430.  
  431.  
  432.  
  433. /**
  434.  * @static
  435.  * @method _updateDirection
  436.  * @private
  437.  */
  438. InputEX._updateDirection = function() {
  439.     var x = this._signX();
  440.     var y = this._signY();
  441.  
  442.     this._dir8 = this._makeNumpadDirection(x, y);
  443.  
  444.     if (x !== 0 && y !== 0) {
  445.         if (this._preferredAxis === 'x') {
  446.             y = 0;
  447.         } else {
  448.             x = 0;
  449.         }
  450.     } else if (x !== 0) {
  451.         this._preferredAxis = 'y';
  452.     } else if (y !== 0) {
  453.         this._preferredAxis = 'x';
  454.     }
  455.  
  456.     this._dir4 = this._makeNumpadDirection(x, y);
  457. };
  458.  
  459. /**
  460.  * @static
  461.  * @method _signX
  462.  * @private
  463.  */
  464. InputEX._signX = function() {
  465.     var x = 0;
  466.  
  467.     if (this.isPressed('left')) {
  468.         x--;
  469.     }
  470.     if (this.isPressed('right')) {
  471.         x++;
  472.     }
  473.     return x;
  474. };
  475.  
  476. /**
  477.  * @static
  478.  * @method _signY
  479.  * @private
  480.  */
  481. InputEX._signY = function() {
  482.     var y = 0;
  483.  
  484.     if (this.isPressed('up')) {
  485.         y--;
  486.     }
  487.     if (this.isPressed('down')) {
  488.         y++;
  489.     }
  490.     return y;
  491. };
  492.  
  493. /**
  494.  * @static
  495.  * @method _makeNumpadDirection
  496.  * @param {Number} x
  497.  * @param {Number} y
  498.  * @return {Number}
  499.  * @private
  500.  */
  501. InputEX._makeNumpadDirection = function(x, y) {
  502.     if (x !== 0 || y !== 0) {
  503.         return  5 - y * 3 + x;
  504.     }
  505.     return 0;
  506. };
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
141
在线时间
20 小时
注册时间
2015-5-5
帖子
2
3
 楼主| 发表于 2019-2-26 15:46:32 | 只看该作者
soulsaga 发表于 2019-2-26 15:08
//=============================================================================
// MV全按鍵  版本2
/ ...

谢谢大佬
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3336
在线时间
468 小时
注册时间
2014-2-6
帖子
258
4
发表于 2019-9-12 19:20:12 | 只看该作者
soulsaga 发表于 2019-2-26 15:08
//=============================================================================
// MV全按鍵  版本2
/ ...

请问大佬,我的游戏打算出售...可以用您这个插件么?
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36695
在线时间
10863 小时
注册时间
2009-3-15
帖子
4824
5
发表于 2019-9-12 19:35:41 | 只看该作者
天空娃娃 发表于 2019-9-12 19:20
请问大佬,我的游戏打算出售...可以用您这个插件么?

作者没有提过这方面..我不知道..
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3336
在线时间
468 小时
注册时间
2014-2-6
帖子
258
6
发表于 2019-9-12 19:42:42 | 只看该作者
soulsaga 发表于 2019-9-12 19:35
作者没有提过这方面..我不知道..

emmmm,那还是不用了....
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3801
在线时间
1180 小时
注册时间
2016-8-9
帖子
2395

开拓者

7
发表于 2019-9-13 19:50:24 | 只看该作者
天空娃娃 发表于 2019-9-12 19:42
emmmm,那还是不用了....

yep系列可商用插件,你值得拥有

按钮公共事件

自定义按键
酸酸甜甜就④哇噢
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3336
在线时间
468 小时
注册时间
2014-2-6
帖子
258
8
发表于 2019-9-13 22:23:01 | 只看该作者
白嫩白嫩的 发表于 2019-9-13 19:50
yep系列可商用插件,你值得拥有

按钮公共事件

这个......直接复制么...没找到在哪里付钱

点评

署名 就行 不要钱  发表于 2019-9-13 23:06
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2276
在线时间
576 小时
注册时间
2018-9-13
帖子
36
9
发表于 2019-9-23 14:47:19 | 只看该作者
链接:https://pan.baidu.com/s/1GnUtFn270_9C_8crrPXk0g
提取码:jhqu
第四梦境的全键盘插件
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
253
在线时间
38 小时
注册时间
2019-8-30
帖子
26
10
发表于 2019-9-27 22:16:40 | 只看该作者
这个插件挺好的
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-9 04:57

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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