決定キーの短押しと長押しの厳密な判別をしたいのですが、うまくいきません。
■コモンイベント内容
トリガー:並列処理
実行内容:
◆条件分岐:スクリプト:Input.isTriggered('ok')
◆スクリプト:console.log("短押し");
◆
:分岐終了
◆条件分岐:スクリプト:Input.isPressed('ok')
◆スクリプト:console.log("長押し");
◆
:分岐終了
■結果
決定キーを押す:「短押し」と表示される
決定キーを長めに押す:「短押し」と表示された後に「長押し」が続く
■望んでいること
決定キーを押す:「短押し」と表示される
決定キーを長めに押す:「長押し」と表示が続く
決定キーを長めに押したときは「長押し」のみを表示するようにしたい(短押し判定不要)のですがどうすればできるのでしょうか?
【解決済み】決定キーの短押しと長押しの厳密な判定をするには?
Re: 決定キーの短押しと長押しの厳密な判定をするには?
解決案の提示ではなくてすみませんが
長押し判定は Input.isLongPressed() が妥当かと思います。
isPressed と isTriggered は同時に反応しちゃうはず。
長押し判定は Input.isLongPressed() が妥当かと思います。
isPressed と isTriggered は同時に反応しちゃうはず。
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/
https://twitter.com/wtr_in_reverie/
Re: 決定キーの短押しと長押しの厳密な判定をするには?
WTRさん、冷やっこさん、ありがとうございます。
アドバイス頂いた通り試してみたのですが、挙動がどうにも安定しないようでした。
改めて考えてみたところ
1フレーム目で、Input.isTriggered('ok') 判定をして、
Nフレーム目で、Input.isPressed(任意ウェイトのタイミング) or Input.isLongPressed(24フレーム目タイミング) で再判定をするわけなので、どのような方法にせよ1フレーム目をキャンセルすることはできなさそうだと気づきました…
なにか方法があればと思ったのですが論理的に無理な気がしてきました。
認識違いでしたら教えて頂けるとありがたいです。
アドバイス頂いた通り試してみたのですが、挙動がどうにも安定しないようでした。
改めて考えてみたところ
1フレーム目で、Input.isTriggered('ok') 判定をして、
Nフレーム目で、Input.isPressed(任意ウェイトのタイミング) or Input.isLongPressed(24フレーム目タイミング) で再判定をするわけなので、どのような方法にせよ1フレーム目をキャンセルすることはできなさそうだと気づきました…
なにか方法があればと思ったのですが論理的に無理な気がしてきました。
認識違いでしたら教えて頂けるとありがたいです。
Re: 決定キーの短押しと長押しの厳密な判定をするには?
こんばんは!
先程書いて消してしまったのですが
先程のは「決定キーを長めに押す:「長押し」と表示が続く」と言う箇所が不完全でして
先程のは長押ししたら1度だけ「長押し」と表示される、と言う具合でした。
改めて作ってみたのですがあまりスマートじゃないと思います…ご参考程度にどうぞ
先程書いて消してしまったのですが
先程のは「決定キーを長めに押す:「長押し」と表示が続く」と言う箇所が不完全でして
先程のは長押ししたら1度だけ「長押し」と表示される、と言う具合でした。
改めて作ってみたのですがあまりスマートじゃないと思います…ご参考程度にどうぞ
コード: 全て選択
◆条件分岐:スクリプト:Input.isTriggered('ok')
◆ウェイト:10フレーム
◆条件分岐:スクリプト:Input.isPressed('ok')
◆ループ
◆条件分岐:スクリプト:Input.isPressed('ok')
◆スクリプト:console.log("長押し");
◆
:それ以外のとき
◆ループの中断
◆
:分岐終了
◆ウェイト:1フレーム
◆
:以上繰り返し
◆
:それ以外のとき
◆スクリプト:console.log("短押し");
◆
:分岐終了
◆
:分岐終了
最後に編集したユーザー 冷やっこ on 2021年6月09日(水) 18:55 [ 編集 1 回目 ]
Re: 決定キーの短押しと長押しの厳密な判定をするには?
変数を1つ用意する。
Input.isPressed('ok')がtrueの間変数を+1する。
Input.isPressed('ok')がfalseになったら変数を0にする。
押している間+1し続けるので変数の値の大きさで押した長さがわかります。
Input.isPressed('ok')がtrueの間変数を+1する。
Input.isPressed('ok')がfalseになったら変数を0にする。
押している間+1し続けるので変数の値の大きさで押した長さがわかります。
Re: 決定キーの短押しと長押しの厳密な判定をするには?
随分前に長押しの判定するスクリプトを見た事がありましたが、確か、
Input.isRepeated('〇〇')
だった様な気がします・・・。
ちなみに前に確認したサイトがこちら。
http://blog.livedoor.jp/trb_surasura/ar ... 28522.html
こちらのサイトによると
Input.isTriggered('○○') ・・・ 押した瞬間だけ条件を満たす
Input.isPressed('○○') ・・・ 押している長さに関係なく押してる間ずっと条件を満たす
Input.isRepeated('○○') ・・・ 24フレーム以上押し続けていると条件を満たす
です。
Input.isRepeated('〇〇')
だった様な気がします・・・。
ちなみに前に確認したサイトがこちら。
http://blog.livedoor.jp/trb_surasura/ar ... 28522.html
こちらのサイトによると
Input.isTriggered('○○') ・・・ 押した瞬間だけ条件を満たす
Input.isPressed('○○') ・・・ 押している長さに関係なく押してる間ずっと条件を満たす
Input.isRepeated('○○') ・・・ 24フレーム以上押し続けていると条件を満たす
です。
Re: 決定キーの短押しと長押しの厳密な判定をするには?
Input.isRepeated() は押された瞬間も true になります。
昔どこかで見た説明ですが
メニューのカーソル移動とかに使われている
カッ、カカカカカッ っていうアレです。
押された瞬間と 24 フレーム以降 6 フレーム毎に true になる。
これはコレで便利ですよね。
昔どこかで見た説明ですが
メニューのカーソル移動とかに使われている
カッ、カカカカカッ っていうアレです。
押された瞬間と 24 フレーム以降 6 フレーム毎に true になる。
これはコレで便利ですよね。
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/
https://twitter.com/wtr_in_reverie/
Re: 決定キーの短押しと長押しの厳密な判定をするには?
冷やっこさん、奏ねこまさん、虚構の城跡さん、WTRさん、ありがとうございます。
冷やっこさんから頂いた新しい実行内容、試してみたところ
長押しした際は、短押しとも表示されず理想的な挙動でした。
決定ボタンを連打すると長押しと表示されるのですが、これはやはり難しいでしょうか。
冷やっこさんから頂いた新しい実行内容、試してみたところ
長押しした際は、短押しとも表示されず理想的な挙動でした。
決定ボタンを連打すると長押しと表示されるのですが、これはやはり難しいでしょうか。
Re: 決定キーの短押しと長押しの厳密な判定をするには?
コード: 全て選択
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/
https://twitter.com/wtr_in_reverie/
Re: 決定キーの短押しと長押しの厳密な判定をするには?
コード: 全て選択
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/
https://twitter.com/wtr_in_reverie/