2020年3月18日水曜日

ウディタ小技 キー入力の連続入力を阻止

ウディタのキー入力で「キーが押されるまで待つ」にチェックをいれない場合、キーが連続で入力された判定になって困った感じになります。
(例えば、「あ」と軽く押したつもりなのに「あああああああ」と入力されてしまう、みたいな感じ)
一種類しかキーを判定しない場合は「キーが押されるまで待つ」にすれば簡単です。しかし、シフトキーと方向キーを判定したい、など二種類以上の場合は「キーが押されるまで待つ」にチェックをいれることができません。
そこで、連続入力を解消する方法は主に二つ。

<その1 ウェイトさせる>
そのまま過ぎてコード載せるまでもない感じですが一応載せておきます。
指定フレーム数以上長押しすると連続で入力されるので、カーソルの移動などにはこちらのほうが適しています。

■ループ開始
 |■ウェイト:1 フレーム
 |■キー入力:このコモンEvセルフ変数10 /  4方向
 |■条件分岐(変数): 【1】CSelf10[キー入力] が 2と同じ 【2】CSelf10[キー入力] が 8と同じ
 |-◇分岐: 【1】 [ CSelf10[キー入力] が 2と同じ ]の場合↓
 | |▼ 下を押したときの処理をここにいれる(略)
 | |■ウェイト:10 フレーム
 | |■
 |-◇分岐: 【2】 [ CSelf10[キー入力] が 8と同じ ]の場合↓
 | |▼ 上を押したときの処理をここにいれる(略)
 | |■ウェイト:10 フレーム
 | |■
 |◇分岐終了◇
 |■
◇ループここまで◇◇

<その2 ループさせて一度キーを離したと判断するまで処理を中断する>
キー入力コマンドは何もキーを押していない時は0が挿入されるので、それを利用します。

■ループ開始
 |■ウェイト:1 フレーム
 |■キー入力:このコモンEvセルフ変数10 /  4方向
 |■条件分岐(変数): 【1】CSelf10[キー入力] が 2と同じ 【2】CSelf10[キー入力] が 8と同じ
 |-◇分岐: 【1】 [ CSelf10[キー入力] が 2と同じ ]の場合↓
 | |▼ 下を押したときの処理をここにいれる(略)
 | | |■ループ開始
 | | |■ウェイト:1 フレーム
 | | |■キー入力:このコモンEvセルフ変数10 /  4方向
 | | |■条件分岐(変数): 【1】CSelf10[キー入力] が 0と同じ
 | | |-◇分岐: 【1】 [ CSelf10[キー入力] が 0と同じ ]の場合↓
 | | | |■ループ中断
 | | | |■
 | | |◇分岐終了◇
 | | |■
 | |◇ループここまで◇◇
 | |■
 |-◇分岐: 【2】 [ CSelf10[キー入力] が 8と同じ ]の場合↓
 | |▼ 上を押したときの処理をここにいれる(略)
 | | |■ループ開始
 | | |■ウェイト:1 フレーム
 | | |■キー入力:このコモンEvセルフ変数10 /  4方向
 | | |■条件分岐(変数): 【1】CSelf10[キー入力] が 0と同じ
 | | |-◇分岐: 【1】 [ CSelf10[キー入力] が 0と同じ ]の場合↓
 | | | |■ループ中断
 | | | |■
 | | |◇分岐終了◇
 | | |■
 | |◇ループここまで◇◇
 | |■
 |◇分岐終了◇
 |■
◇ループここまで◇◇


以下10/18追記
<その3 一度キーを離した時用の変数をONにする>
その2と考え方は同じで、何もキーを押していない時は0が挿入されるので、その場合にのみ「キー入力準備OK」という変数に1を代入します。

書き直す前にこのブログに書いていたやり方はこれでした。
ループさせる方がスマートかなと思って削除したのですが、状況によってはこちらの方が使いやすい場合があるみたいなので再掲。



0 件のコメント:

コメントを投稿

最後のお祭り[フリゲ2023]

 12月と言えば毎年楽しみにしているイベントがありまして。 「フリゲ20××あなたが選ぶ今年のベストフリーゲーム」 というものです。 フリゲ界隈でSNSやってたらとっても有名な投票企画で、毎年、その年に発表された(または更新された)フリーゲームで気に入ったものに投票する、というも...