rpg maker mv 全键盘插件 自编写
第四梦境
编辑于 2019年09月23日 12:10

/*:

 *

 * @plugindesc 扩展键盘输入脚本

 * @author 第四梦境

 * @help 第四梦境编写的扩展键盘输入脚本

 *利用规约:你可以免费将本插件用于免费或商业游戏,不得修改本插件的作者名

 *使用方法:

 *  判断是否按着(Press):Input.isPressed(键值)

 *  判断是否按下(Trigger):Input.isTriggered(键值)

 *  判断是否重复按下(Repeat):Input.isRepeated(键值)

 *  判断是否长按(LongPress):Input.isLongPressed(键值) 

 *  双击button_option选项可以设置按键,双击button_option选项的项,可更改的为键值,不可更改的为键,键

 *  由键名和键码组成,由|:符号分割,前面的字符串为键名,对应键盘上的键;后

 *  面的数字为键码,对应键盘上该键的码。

 *  can_change_button设置是否让玩家可以自定义按键

 *  can_change_button_list为玩家可以修改的按键列表,若can_change_button为false,则无效。

 *  双击can_change_button_list,可以添加玩家可修改的按键

 *  can_change_button_list列表的项分为键码keyCode和描述desc,键码对应button_option选项项的键码,描

 *  述可以填写该按键的作用。

 *

 * @param button_option

 * @desc 设置按键

 * @type struct<setBTname>

 * @default {"backspace|:8&#​34;:"backspace&#​34;,"tab|:9&#​34;:"tab&#​34;,"enter|:13&#​34;:"ok&#​34;,"shift|:16&#​34;:"P&#​34;,"control|:17&#​34;:"control&#​34;,"alt|:18&#​34;:"alt&#​34;,"pause|:19&#​34;:"pause&#​34;,"caps_lock|:20&#​34;:"caps_lock&#​34;,"esc|:27&#​34;:"escape&#​34;,"space|:32&#​34;:"space&#​34;,"pageup|:33&#​34;:"pageup&#​34;,"pagedown|:34&#​34;:"pagedown&#​34;,"end|:35&#​34;:"end&#​34;,"home|:36&#​34;:"home&#​34;,"left|:37&#​34;:"A&#​34;,"up|:38&#​34;:"W&#​34;,"right|:39&#​34;:"D&#​34;,"down|:40&#​34;:"S&#​34;,"print_screen|:44&#​34;:"print_screen&#​34;,"insert|:45&#​34;:"insert&#​34;,"del|:46&#​34;:"del&#​34;,"num_0|:48&#​34;:"num_0&#​34;,"num_1|:49&#​34;:"num_1&#​34;,"num_2|:50&#​34;:"num_2&#​34;,"num_3|:51&#​34;:"num_3&#​34;,"num_4|:52&#​34;:"num_4&#​34;,"num_5|:53&#​34;:"num_5&#​34;,"num_6|:54&#​34;:"num_6&#​34;,"num_7|:55&#​34;:"num_7&#​34;,"num_8|:56&#​34;:"num_8&#​34;,"num_9|:57&#​34;:"num_9&#​34;,"A|:65&#​34;:"left&#​34;,"B|:66&#​34;:"B&#​34;,"C|:67&#​34;:"C&#​34;,"D|:68&#​34;:"right&#​34;,"E|:69&#​34;:"E&#​34;,"F|:70&#​34;:"F&#​34;,"G|:71&#​34;:"G&#​34;,"H|:72&#​34;:"H&#​34;,"I|:73&#​34;:"I&#​34;,"J|:74&#​34;:"J&#​34;,"K|:75&#​34;:"K&#​34;,"L|:76&#​34;:"L&#​34;,"M|:77&#​34;:"M&#​34;,"N|:78&#​34;:"N&#​34;,"O|:79&#​34;:"O&#​34;,"P|:80&#​34;:"shift&#​34;,"Q|:81&#​34;:"Q&#​34;,"R|:82&#​34;:"R&#​34;,"S|:83&#​34;:"down&#​34;,"T|:84&#​34;:"T&#​34;,"U|:85&#​34;:"U&#​34;,"V|:86&#​34;:"V&#​34;,"W|:87&#​34;:"up&#​34;,"X|:88&#​34;:"X&#​34;,"Y|:89&#​34;:"Y&#​34;,"Z|:90&#​34;:"Z&#​34;,"numpad_0|:96&#​34;:"numpad_0&#​34;,"numpad_1|:97&#​34;:"numpad_1&#​34;,"numpad_2|:98&#​34;:"numpad_2&#​34;,"numpad_3|:99&#​34;:"numpad_3&#​34;,"numpad_4|:100&#​34;:"numpad_4&#​34;,"numpad_5|:101&#​34;:"numpad_5&#​34;,"numpad_6|:102&#​34;:"numpad_6&#​34;,"numpad_7|:103&#​34;:"numpad_7&#​34;,"numpad_8|:104&#​34;:"numpad_8&#​34;,"numpad_9|:105&#​34;:"numpad_9&#​34;,"numpad_*|:106&#​34;:"numpad_*&#​34;,"numpad_+|:107&#​34;:"numpad_+&#​34;,"numpad_Enter|:108&#​34;:"ok&#​34;,"numpad_-|:109&#​34;:"numpad_-&#​34;,"numpad_.|:110&#​34;:"numpad_.&#​34;,"numpad_/|:111&#​34;:"numpad_/&#​34;,"F1|:112&#​34;:"F1&#​34;,"F2|:113&#​34;:"F2&#​34;,"F3|:114&#​34;:"F3&#​34;,"F4|:115&#​34;:"F4&#​34;,"F5|:116&#​34;:"F5&#​34;,"F6|:117&#​34;:"F6&#​34;,"F7|:118&#​34;:"F7&#​34;,"F8|:119&#​34;:"F8&#​34;,"F9|:120&#​34;:"debug&#​34;,"F10|:121&#​34;:"F10&#​34;,"F11|:122&#​34;:"F11&#​34;,"F12|:123&#​34;:"F12&#​34;,";|:186&#​34;:";&#​34;,"=|:187&#​34;:"=&#​34;,",|:188&#​34;:",&#​34;,"-|:189&#​34;:"-&#​34;,".|:190&#​34;:".&#​34;,"/|:191&#​34;:"/&#​34;,"`|:192&#​34;:"`&#​34;,"[|:219&#​34;:"[&#​34;,"\\|:220&#​34;:"\\&#​34;,"]|:221&#​34;:"]&#​34;,"&#​39;|:222":&#​34;'&#​34;}

 *

 * @param can_change_button

 * @desc 是否让玩家可以自定义按键

 * @type boolean

 * @on TRUE

 * @off FALSE

 * @default true

 *

 * @param can_change_button_list

 * @type struct<canChangeButtonItem>[]

 * @default ["{\&#​34;keyCode\":\&#​34;65\",\&#​34;desc\":\&#​34;方向键左\"}&#​34;,"{\&#​34;keyCode\":\&#​34;87\",\&#​34;desc\":\&#​34;方向键上\"}&#​34;,"{\&#​34;keyCode\":\&#​34;68\",\&#​34;desc\":\&#​34;方向键右\"}&#​34;,"{\&#​34;keyCode\":\&#​34;83\",\&#​34;desc\":\&#​34;方向键下\"}&#​34;,"{\&#​34;keyCode\":\&#​34;80\",\&#​34;desc\":\&#​34;加速键\"}&#​34;]

 *

 *

 */

 

 /*~struct~canChangeButtonItem:

 *

 * @param keyCode

 * @default 0

 *

 * @param desc

 * @default null

 *

 */

 

 /*~struct~setBTname:

 *

 * @param backspace|:8

 * @default backspace

 *

 * @param tab|:9

 * @default tab

 *

 * @param enter|:13

 * @default enter

 *

 * @param shift|:16

 * @default shift

 *

 * @param control|:17

 * @default control

 *

 * @param alt|:18

 * @default alt

 *

 * @param pause|:19

 * @default pause

 *

 * @param caps_lock|:20

 * @default caps_lock

 *

 * @param esc|:27

 * @default esc

 *

 * @param space|:32

 * @default space

 *

 * @param pageup|:33

 * @default pageup

 *

 * @param pagedown|:34

 * @default pagedown

 *

 * @param end|:35

 * @default end

 *

 * @param home|:36

 * @default home

 *

 * @param left|:37

 * @default left

 *

 * @param up|:38

 * @default up

 *

 * @param right|:39

 * @default right

 *

 * @param down|:40

 * @default down

 *

 * @param print_screen|:44

 * @default print_screen

 *

 * @param insert|:45

 * @default insert

 *

 * @param del|:46

 * @default del

 *

 * @param num_0|:48

 * @default num_0

 *

 * @param num_1|:49

 * @default num_1

 *

 * @param num_2|:50

 * @default num_2

 *

 * @param num_3|:51

 * @default num_3

 *

 * @param num_4|:52

 * @default num_4

 *

 * @param num_5|:53

 * @default num_5

 *

 * @param num_6|:54

 * @default num_6

 *

 * @param num_7|:55

 * @default num_7

 *

 * @param num_8|:56

 * @default num_8

 *

 * @param num_9|:57

 * @default num_9

 *

 * @param A|:65

 * @default A

 *

 * @param B|:66

 * @default B

 *

 * @param C|:67

 * @default C

 *

 * @param D|:68

 * @default D

 *

 * @param E|:69

 * @default E

 *

 * @param F|:70

 * @default F

 *

 * @param G|:71

 * @default G

 *

 * @param H|:72

 * @default H

 *

 * @param I|:73

 * @default I

 *

 * @param J|:74

 * @default J

 *

 * @param K|:75

 * @default K

 *

 * @param L|:76

 * @default L

 *

 * @param M|:77

 * @default M

 *

 * @param N|:78

 * @default N

 *

 * @param O|:79

 * @default O

 *

 * @param P|:80

 * @default P

 *

 * @param Q|:81

 * @default Q

 *

 * @param R|:82

 * @default R

 *

 * @param S|:83

 * @default S

 *

 * @param T|:84

 * @default T

 *

 * @param U|:85

 * @default U

 *

 * @param V|:86

 * @default V

 *

 * @param W|:87

 * @default W

 *

 * @param X|:88

 * @default X

 *

 * @param Y|:89

 * @default Y

 *

 * @param Z|:90

 * @default Z

 *

 * @param numpad_0|:96

 * @default numpad_0

 *

 * @param numpad_1|:97

 * @default numpad_1

 *

 * @param numpad_2|:98

 * @default numpad_2

 *

 * @param numpad_3|:99

 * @default numpad_3

 *

 * @param numpad_4|:100

 * @default numpad_4

 *

 * @param numpad_5|:101

 * @default numpad_5

 *

 * @param numpad_6|:102

 * @default numpad_6

 *

 * @param numpad_7|:103

 * @default numpad_7

 *

 * @param numpad_8|:104

 * @default numpad_8

 *

 * @param numpad_9|:105

 * @default numpad_9

 *

 * @param numpad_*|:106

 * @default numpad_*

 *

 * @param numpad_+|:107

 * @default numpad_+

 *

 * @param numpad_Enter|:108

 * @default numpad_Enter

 *

 * @param numpad_-|:109

 * @default numpad_-

 *

 * @param numpad_.|:110

 * @default numpad_.

 *

 * @param numpad_/|:111

 * @default numpad_/

 *

 * @param F1|:112

 * @default F1

 *

 * @param F2|:113

 * @default F2

 *

 * @param F3|:114

 * @default F3

 *

 * @param F4|:115

 * @default F4

 *

 * @param F5|:116

 * @default F5

 *

 * @param F6|:117

 * @default F6

 *

 * @param F7|:118

 * @default F7

 *

 * @param F8|:119

 * @default F8

 *

 * @param F9|:120

 * @default F9

 *

 * @param F10|:121

 * @default F10

 *

 * @param F11|:122

 * @default F11

 *

 * @param F12|:123

 * @default F12

 *

 * @param ;|:186

 * @default ;

 *

 * @param =|:187

 * @default =

 *

 * @param ,|:188

 * @default ,

 *

 * @param -|:189

 * @default -

 *

 * @param .|:190

 * @default .

 *

 * @param /|:191

 * @default /

 *

 * @param `|:192

 * @default `

 *

 * @param [|:219

 * @default [

 *

 * @param \|:220

 * @default \

 *

 * @param ]|:221

 * @default ]

 *

 * @param '|:222

 * @default '

 *

 */

 

 

 var $d4mj_Input = $d4mj_Input || {};

 

 $d4mj_Input.Parameters = PluginManager.parameters('d4mj_Input&#​39;);

 $d4mj_Input.can_change_button = $d4mj_Input.Parameters['can_change_button&#​39;] == "false&#​34; ? false : true;

 $d4mj_Input.can_change_button_list = [];

 $d4mj_Input.Input = {};

 $d4mj_Input.ZInput = JSON.parse($d4mj_Input.Parameters['button_option&#​39;]);

 

 Input.keyMapper = {};

 for (var key in $d4mj_Input.ZInput) {

var knc = key.split("|:&#​34;);var kn = knc[0];var kc = knc[1];

$d4mj_Input.Input[kn] = {"btn&#​34;:kn,"bt&#​34;:$d4mj_Input.ZInput[key]};

Input.keyMapper[kc] = $d4mj_Input.Input[kn];

 };

 if ($d4mj_Input.can_change_button) {

var ccbl = JSON.parse($d4mj_Input.Parameters['can_change_button_list&#​39;]);

     for (var i = 0;i < ccbl.length;i++) {

     $d4mj_Input.can_change_button_list[i] = JSON.parse(ccbl[i]);

     }

 }

 

 d4mj_Input_Input_xg_initialize = Input.initialize;

 Input.initialize = function() {

d4mj_Input_Input_xg_initialize.call(this);

ConfigManager.loadKeyMapper();

};

d4mj_Input_Input_xg_clear = Input.clear;

Input.clear = function() {

d4mj_Input_Input_xg_clear.call(this);

this.latestKeyCode = -1;

};

d4mj_Input_Input_xg_update = Input.update;

Input.update = function() {

d4mj_Input_Input_xg_update.call(this);

this._latestKeyCode = this.latestKeyCode;

};

 

 Input._onKeyDown = function(event) {

    if (this._shouldPreventDefault(event.keyCode)) {

        event.preventDefault();

    }

    if (event.keyCode === 144) {

        this.clear();

    }

var kmr = this.keyMapper[event.keyCode];

if (kmr)

    var buttonName = kmr.bt;

    if (buttonName) {

        this._currentState[buttonName] = true;

this.latestKeyCode = event.keyCode;

    }

};

 

 Input._onKeyUp = function(event) {

    var kmr = this.keyMapper[event.keyCode];

if (kmr)

    var buttonName = kmr.bt;

    if (buttonName) {

        this._currentState[buttonName] = false;

    }

    if (event.keyCode === 0) {

        this.clear();

    }

};

d4mj_Input_ConfigManager_xg_makeData = ConfigManager.makeData;

ConfigManager.makeData = function() {

    var config = d4mj_Input_ConfigManager_xg_makeData.call(this);

    config.keyMapper = Input.keyMapper;

config.can_change_button_list = $d4mj_Input.can_change_button_list;

    return config;

};

ConfigManager.loadKeyMapper = function() {

    var json;

    var config = {};

    try {

        json = StorageManager.load(-1);

    } catch (e) {

        console.error(e);

    }

    if (json) {

        config = JSON.parse(json);

    }

    Input.keyMapper = config.keyMapper || Input.keyMapper;

$d4mj_Input.can_change_button_list = config.can_change_button_list || $d4mj_Input.can_change_button_list;

};

d4mj_Input_Window_Options_xg_addGeneralOptions = Window_Options.prototype.addGeneralOptions;

Window_Options.prototype.addGeneralOptions = function() {

d4mj_Input_Window_Options_xg_addGeneralOptions.call(this);

if ($d4mj_Input.can_change_button) {

    this.addCommand("按键设置&#​34;, 'buttonoption&#​39;);//for (var i = 0;i < 20;i++) this.addCommand("按键设置&#​34;, 'buttonoption&#​39;);

}

};

d4mj_Input_Window_Options_xg_statusText = Window_Options.prototype.statusText;

Window_Options.prototype.statusText = function(index) {

    var symbol = this.commandSymbol(index);

    if (symbol == "buttonoption&#​34;) {

        return "&#​34;;

    }else {

        return d4mj_Input_Window_Options_xg_statusText.call(this,index);

    }

};

d4mj_Input_Window_Options_xg_processOk = Window_Options.prototype.processOk;

Window_Options.prototype.processOk = function() {

    var index = this.index();

    var symbol = this.commandSymbol(index);

    if (symbol == "buttonoption&#​34;) {

        SceneManager.push(d4mj_Input_Scene_ButtonOptions);

    }else {

        d4mj_Input_Window_Options_xg_processOk.call(this);

    }

};

function d4mj_Input_Window_ButtonOptions() {

    this.initialize.apply(this, arguments);

}

d4mj_Input_Window_ButtonOptions.prototype = Object.create(Window_Options.prototype);

d4mj_Input_Window_ButtonOptions.prototype.constructor = d4mj_Input_Window_ButtonOptions;

d4mj_Input_Window_ButtonOptions.prototype.initialize = function() {

    Window_Options.prototype.initialize.call(this);

};

d4mj_Input_Window_ButtonOptions.prototype.addGeneralOptions = function() {

for (var i = 0;i < $d4mj_Input.can_change_button_list.length;i++) {

this.addCommand($d4mj_Input.can_change_button_list[i]["desc&#​34;], $d4mj_Input.can_change_button_list[i]["keyCode&#​34;]);//alert($d4mj_Input.can_change_button_list[i]);

}

};

d4mj_Input_Window_ButtonOptions.prototype.addVolumeOptions = function() {

    

};

d4mj_Input_Window_ButtonOptions.prototype.statusText = function(index) {

    var symbol = this.commandSymbol(index);

    return Input.keyMapper[symbol]["btn&#​34;];

};

d4mj_Input_Window_ButtonOptions.prototype.update = function() {

    Window_Options.prototype.update.call(this);

this.d4mj_Input_updateButtonKeyValue();

};

d4mj_Input_Window_ButtonOptions.prototype.d4mj_Input_updateButtonKeyValue = function() {

    var index = this.index();

        var symbol = this.commandSymbol(index);

    var Input_latestKeyCode = Input._latestKeyCode;Input_latestButton = Input._latestButton;

        if (Input.isTriggered(Input_latestButton) && Input_latestKeyCode > 0) {

if (Input_latestKeyCode == symbol || Input_latestButton == 'escape&#​39; || Input_latestButton == 'ok&#​39; || Input_latestKeyCode == 144) {

Input._latestKeyCode = -1;

Input.latestKeyCode = -1;

return;

}

var kmtbt = Input.keyMapper[symbol]["bt&#​34;];

Input.keyMapper[symbol]["bt&#​34;] = Input.keyMapper[Input_latestKeyCode]["bt&#​34;];

Input.keyMapper[Input_latestKeyCode]["bt&#​34;] = kmtbt;

var csn = Input._currentState[Input.keyMapper[Input_latestKeyCode]["bt&#​34;]];

Input._currentState[Input.keyMapper[Input_latestKeyCode]["bt&#​34;]] = Input._currentState[Input.keyMapper[symbol]["bt&#​34;]];

Input._currentState[Input.keyMapper[symbol]["bt&#​34;]] = csn;

$d4mj_Input.can_change_button_list[index]["keyCode&#​34;] = Input_latestKeyCode;

var symbolt = symbol;latestKeyCodet = Input_latestKeyCode;

var latestKeyCodeti = this.findSymbol(Input_latestKeyCode);

this._list[index].symbol = latestKeyCodet;

if(latestKeyCodeti > -1) {

this._list[latestKeyCodeti].symbol = symbolt;

$d4mj_Input.can_change_button_list[latestKeyCodeti]["keyCode&#​34;] = symbolt;

}

Input._latestKeyCode = -1;

Input.latestKeyCode = -1;

        this.redrawItem(index);

this.redrawItem(latestKeyCodeti);

        SoundManager.playCursor();

    }

};

d4mj_Input_Window_ButtonOptions.prototype.changekeyMapper = function(symbol, index) {

    

};

d4mj_Input_Window_ButtonOptions.prototype.findSymbol = function(symbol) {

    for (var i = 0; i < this._list.length; i++) {

        if (this._list[i].symbol == symbol) {

            return i;

        }

    }

    return -1;

};

d4mj_Input_Window_ButtonOptions.prototype.isOkTriggered = function() {

    return false;

};

d4mj_Input_Window_ButtonOptions.prototype.isCancelTriggered = function() {

return false;

};

d4mj_Input_Window_ButtonOptions.prototype.processHandling = function() {

};

d4mj_Input_Window_ButtonOptions.prototype.processCursorMove = function() {

};

d4mj_Input_Window_ButtonOptions.prototype.processOk = function() {

    

};

/*d4mj_Input_Window_ButtonOptions.prototype.cursorUp = function(wrap) {

    

};

d4mj_Input_Window_ButtonOptions.prototype.cursorDown = function(wrap) {

    

};

d4mj_Input_Window_ButtonOptions.prototype.cursorRight = function(wrap) {

    

};

d4mj_Input_Window_ButtonOptions.prototype.cursorLeft = function(wrap) {

};

d4mj_Input_Window_ButtonOptions.prototype.cursorPagedown = function() {

    

};

d4mj_Input_Window_ButtonOptions.prototype.cursorPageup = function() {

    

};*/

function d4mj_Input_Scene_ButtonOptions() {

    this.initialize.apply(this, arguments);

}

//设置原形 

d4mj_Input_Scene_ButtonOptions.prototype = Object.create(Scene_MenuBase.prototype);

//设置创造者

d4mj_Input_Scene_ButtonOptions.prototype.constructor = d4mj_Input_Scene_ButtonOptions;

//初始化

d4mj_Input_Scene_ButtonOptions.prototype.initialize = function() {

    Scene_MenuBase.prototype.initialize.call(this);

};

//创建

d4mj_Input_Scene_ButtonOptions.prototype.create = function() {

    Scene_MenuBase.prototype.create.call(this);

    this.createButtonOptionsWindow();

};

//终止

d4mj_Input_Scene_ButtonOptions.prototype.terminate = function() {

    Scene_MenuBase.prototype.terminate.call(this);

    //ConfigManager.save();

};

//创建选项窗口

d4mj_Input_Scene_ButtonOptions.prototype.createButtonOptionsWindow = function() {

    this._buttonOptionsWindow = new d4mj_Input_Window_ButtonOptions();

    this._buttonOptionsWindow.setHandler('cancel&#​39;, this.popScene.bind(this));

    this.addWindow(this._buttonOptionsWindow);

};

链接:https://pan.baidu.com/s/1GnUtFn270_9C_8crrPXk0g 

提取码:jhqu