ページ 11

【解決済み】誤操作をなくすため長押し判定しないようにしたい(キーボード、マウスなど)

Posted: 2021年1月31日(日) 14:15
by daw
誤操作をなくすため、キーボード、マウスなどの長押し判定をしないようにしたいです。

長押し判定なしにしたい場面はゲーム中全般ですが、
例えば、
・メニュー画面の操作
・戦闘時の操作
・メッセージ送り
の場面です。
プレイヤーが1回キーを押しただけ(のつもり)なのに、
長押しで複数回押したことになって、想定外の動作をするのを止めたいです。

※ただ、移動キー(矢印キーなど)は長押し判定がないと不便ですので、
 それは残したいのですが……

【問題の例】
装備を変えようとして↓画面で決定キーを1回押すと、
soubi.png
2回決定キーを押した判定になってしまい、キャラ選択の場面をとばして、
一気に「ハロルド」の装備画面になります。
harorudo.png
このような誤操作が頻発するのですが、何か解決方法をご存じないでしょうか……?

※そのほか試したこと
 ・複数のキーボードで検証して同じ動作だったため、キーボードの問題ではなさそうです。
 ・ツクールMVではなく、MZで試したら、少しだけ誤操作は減りました(ソフト自体が重いから?)。
  となるとPCの処理速度の問題かもしれませんが、プレイヤー環境によって誤操作になる状況はどうにかしたい……
 ・プラグインを探した結果、トリアコンタン様の「イベント高速化禁止プラグイン(DisableFastForward.js)」が見つかりましたが、「長押しでマップの更新速度が2倍になる仕様を制限」という仕様だったので、今回の事例には当てはまりませんでした。

Re: 誤操作をなくすため長押し判定しないようにしたい(キーボード、マウスなど)

Posted: 2021年1月31日(日) 15:42
by WTR
連続入力判定を止めるだけ。
下記を適当な名前を付けてまるごとプラグインとして保存すれば動くと思います。
ほとんどあらゆるウィンドウに対して効くので本当に大丈夫かちょっと自信ありませんが…

イベント高速化に対しては何も対処していません。
メッセージ表示中にOK長押しするとメッセージは飛びませんがイベントは高速化します。

コード: 全て選択

(() => {
    "use strict";

Window_Selectable.prototype.isOkTriggered = function() {
    return Input.isTriggered('ok');
};

Window_Selectable.prototype.isCancelTriggered = function() {
    return Input.isTriggered('cancel');
};

Window_Message.prototype.isTriggered = function() {
    return (Input.isTriggered('ok') || Input.isTriggered('cancel') ||
            TouchInput.isTriggered());
};

})();

Re: 誤操作をなくすため長押し判定しないようにしたい(キーボード、マウスなど)

Posted: 2021年1月31日(日) 17:42
by daw
WTR様

できました!
ご教授のとおりにプラグインを作成したところ、理想的な動きになりました。
大変助かりました。ありがとうございました。