【解決済み】決定キーの短押しと長押しの厳密な判定をするには?

rpgcode
記事: 47
登録日時: 2020年2月29日(土) 03:53

【解決済み】決定キーの短押しと長押しの厳密な判定をするには?

投稿記事by rpgcode » 2021年6月09日(水) 15:40

決定キーの短押しと長押しの厳密な判別をしたいのですが、うまくいきません。

■コモンイベント内容
トリガー:並列処理
実行内容:
◆条件分岐:スクリプト:Input.isTriggered('ok')
◆スクリプト:console.log("短押し");

:分岐終了
◆条件分岐:スクリプト:Input.isPressed('ok')
◆スクリプト:console.log("長押し");

:分岐終了

■結果
   決定キーを押す:「短押し」と表示される
決定キーを長めに押す:「短押し」と表示された後に「長押し」が続く

■望んでいること
   決定キーを押す:「短押し」と表示される
決定キーを長めに押す:「長押し」と表示が続く

決定キーを長めに押したときは「長押し」のみを表示するようにしたい(短押し判定不要)のですがどうすればできるのでしょうか?
最後に編集したユーザー rpgcode on 2021年6月09日(水) 22:03 [ 編集 1 回目 ]

アバター
WTR
記事: 559
登録日時: 2015年12月22日(火) 19:14

Re: 決定キーの短押しと長押しの厳密な判定をするには?

投稿記事by WTR » 2021年6月09日(水) 16:15

解決案の提示ではなくてすみませんが
長押し判定は Input.isLongPressed() が妥当かと思います。
isPressed と isTriggered は同時に反応しちゃうはず。
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/
rpgcode
記事: 47
登録日時: 2020年2月29日(土) 03:53

Re: 決定キーの短押しと長押しの厳密な判定をするには?

投稿記事by rpgcode » 2021年6月09日(水) 18:25

WTRさん、冷やっこさん、ありがとうございます。

アドバイス頂いた通り試してみたのですが、挙動がどうにも安定しないようでした。
改めて考えてみたところ

1フレーム目で、Input.isTriggered('ok') 判定をして、
Nフレーム目で、Input.isPressed(任意ウェイトのタイミング) or Input.isLongPressed(24フレーム目タイミング) で再判定をするわけなので、どのような方法にせよ1フレーム目をキャンセルすることはできなさそうだと気づきました…

なにか方法があればと思ったのですが論理的に無理な気がしてきました。
認識違いでしたら教えて頂けるとありがたいです。
アバター
冷やっこ
記事: 132
登録日時: 2020年3月04日(水) 22:47

Re: 決定キーの短押しと長押しの厳密な判定をするには?

投稿記事by 冷やっこ » 2021年6月09日(水) 18:47

こんばんは!

先程書いて消してしまったのですが
先程のは「決定キーを長めに押す:「長押し」と表示が続く」と言う箇所が不完全でして
先程のは長押ししたら1度だけ「長押し」と表示される、と言う具合でした。
改めて作ってみたのですがあまりスマートじゃないと思います…ご参考程度にどうぞ :|

コード: 全て選択

◆条件分岐:スクリプト:Input.isTriggered('ok')
  ◆ウェイト:10フレーム
  ◆条件分岐:スクリプト:Input.isPressed('ok')
    ◆ループ
      ◆条件分岐:スクリプト:Input.isPressed('ok')
        ◆スクリプト:console.log("長押し");
        ◆
      :それ以外のとき
        ◆ループの中断
        ◆
      :分岐終了
      ◆ウェイト:1フレーム
      ◆
    :以上繰り返し
    ◆
  :それ以外のとき
    ◆スクリプト:console.log("短押し");
    ◆
  :分岐終了
  ◆
:分岐終了
最後に編集したユーザー 冷やっこ on 2021年6月09日(水) 18:55 [ 編集 1 回目 ]
奏ねこま
記事: 702
登録日時: 2016年1月20日(水) 20:04

Re: 決定キーの短押しと長押しの厳密な判定をするには?

投稿記事by 奏ねこま » 2021年6月09日(水) 18:55

変数を1つ用意する。

Input.isPressed('ok')がtrueの間変数を+1する。

Input.isPressed('ok')がfalseになったら変数を0にする。

押している間+1し続けるので変数の値の大きさで押した長さがわかります。
アバター
虚構の城跡
記事: 696
登録日時: 2016年9月23日(金) 16:58
連絡を取る:

Re: 決定キーの短押しと長押しの厳密な判定をするには?

投稿記事by 虚構の城跡 » 2021年6月09日(水) 18:59

随分前に長押しの判定するスクリプトを見た事がありましたが、確か、
Input.isRepeated('〇〇')
だった様な気がします・・・。
ちなみに前に確認したサイトがこちら。
http://blog.livedoor.jp/trb_surasura/ar ... 28522.html

こちらのサイトによると
Input.isTriggered('○○') ・・・ 押した瞬間だけ条件を満たす
Input.isPressed('○○') ・・・ 押している長さに関係なく押してる間ずっと条件を満たす
Input.isRepeated('○○') ・・・ 24フレーム以上押し続けていると条件を満たす

です。
アバター
WTR
記事: 559
登録日時: 2015年12月22日(火) 19:14

Re: 決定キーの短押しと長押しの厳密な判定をするには?

投稿記事by WTR » 2021年6月09日(水) 19:25

Input.isRepeated() は押された瞬間も true になります。

昔どこかで見た説明ですが
メニューのカーソル移動とかに使われている
カッ、カカカカカッ っていうアレです。

押された瞬間と 24 フレーム以降 6 フレーム毎に true になる。
これはコレで便利ですよね。
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/
rpgcode
記事: 47
登録日時: 2020年2月29日(土) 03:53

Re: 決定キーの短押しと長押しの厳密な判定をするには?

投稿記事by rpgcode » 2021年6月09日(水) 19:42

冷やっこさん、奏ねこまさん、虚構の城跡さん、WTRさん、ありがとうございます。

冷やっこさんから頂いた新しい実行内容、試してみたところ
長押しした際は、短押しとも表示されず理想的な挙動でした。

決定ボタンを連打すると長押しと表示されるのですが、これはやはり難しいでしょうか。
アバター
WTR
記事: 559
登録日時: 2015年12月22日(火) 19:14

Re: 決定キーの短押しと長押しの厳密な判定をするには?

投稿記事by WTR » 2021年6月09日(水) 21:06

コード: 全て選択

if (Input.isPressed("ok")) {
   $gameSwitches.setValue(1, true);
   $gameVariables.setValue(1, $gameVariables.value(1) + 1);
   if ($gameVariables.value(1) >= 24) console.log("長押し");
}
if ($gameSwitches.value(1) && !Input.isPressed("ok")) {
   if ($gameVariables.value(1) < 24) console.log("短押し");
   $gameSwitches.setValue(1, false);
   $gameVariables.setValue(1, 0);
}


どうですかね…
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/
アバター
WTR
記事: 559
登録日時: 2015年12月22日(火) 19:14

Re: 決定キーの短押しと長押しの厳密な判定をするには?

投稿記事by WTR » 2021年6月09日(水) 21:31

コード: 全て選択

if (Input.isPressed("ok")) {
   $gameSwitches.setValue(1, true);
   if (Input._pressedTime >= 24) {
      console.log("長押し");
   }
}
if ($gameSwitches.value(1) && !Input.isPressed("ok")) {
   if (Input._pressedTime < 24) {
      console.log("短押し");
   }
   $gameSwitches.setValue(1, false);
}

お行儀がよくないと言われるかもしれませんが Input._pressedTime を盗み見るというのも
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/

“MV:質問” へ戻る