忍者ブログ
ぼくのかんがえた押しっぱなし処理

昔考えたキー押しっぱなし処理の概要を
なんとなく解説してみます。

■注意
・なんらかのバグがあるかもしれません
・解説が下手なのは仕様です
・よくある処理だったらどうしよう
・10/9 12:03 誤字修正
 ◆キー入力の処理:[キー入力受付] (待つ)
 ↓
 ◆キー入力の処理:[キー入力受付] (待たない

こちらが正しい内容です。
入力を待ったら繰り返ししてる意味ないじゃないか!
----------
・10/29 バグについて
場合によっては致命的になり得るバグが見つかりました。
解決策は(多分)見つかったのですが
この際なので修正版はサイトの方にアップしたいと思います。


■前準備
まずは以下のスイッチと変数を用意します。

[スイッチ]
・キー押している

[変数]
・キー入力受付
・↑キー押し時間

簡略化の為解説は↑キーのみです。

その他のキーも押しっぱなしにしたい時は
各々のキーに変数を用意してください。

また、解説文中のスイッチ・変数は【】で囲います。

■解説

1.まずは下準備----------
◆ラベルの設定:1番
◆ウェイト:0.0秒
◆指定ラベルへ飛ぶ:1番

まずはラベルの設定を使って枠組みを作ります。
もちろん繰り返しでもかまいません。
この辺解説いらないんじゃ

2.普通のキー入力を作ってみる----------
◆ラベルの設定:1番
◆キー入力の処理:[キー入力受付](待つ)
◆条件分岐:[キー入力受付]が4
 ◆※動作処理※
 ◆
:分岐終了
◆ウェイト:0.0秒
◆指定ラベルへ飛ぶ:1番

なんの変哲もないキー入力処理です。
キー入力処理の横に(待つ)と書かれているのは
「"キーが押されるまで待つ"にチェックを入れている」ということです。

現状ではキーを押しっぱなしにしても一回しか動きません。
かといって(待つ)チェックを外してしまうと
物凄い勢いで処理が進んでいきます。ルーレットってレベルじゃねーぞ!

3.ようやっと本題です----------
◆ラベルの設定:1番
◆スイッチの操作:[キー押している]をOFFにする
◆条件分岐[↑キー押し時間]が1以上
 ◆スイッチの操作:[キー押している]をONにする
 ◆
:分岐終了

◆条件分岐[キー押している]がOFF
 ◆繰り返し処理
 ◆キー入力の処理:[キー入力受付] (待たない)
 ◆条件分岐:[キー入力受付] が0以外
  ◆繰り返しの中断
  ◆
 :分岐終了
 ◆ウェイト:0.0秒
 :以上繰り返し

:それ以外の場合
 ◆キー入力の処理:[キー入力受付] (待たない)
 ◆
:分岐終了

◆条件分岐:[キー入力受付]が4
 ◆条件分岐:変数[↑キー押し時間]が0
  ◆※動作処理※
  ◆
 :分岐終了

 ◆変数の操作:[↑キー押し時間]加算(1)
 ◆条件分岐:変数[↑キー押し時間]が25以上
  ◆※動作処理※
  ◆ウェイト:0.0秒
  ◆
 :分岐終了
 ◆
:それ以外の場合(入力受付が4以外)
 ◆変数の操作:[↑キー押し時間]代入(0)
 ◆
:分岐終了
◆ウェイト:0.0秒
◆指定ラベルへ飛ぶ:1番
条件分岐が増えて分かりにくいなと思って色を付けたらさらにカオスが増したという

いきなりですがこれが完成版です。
急に重要な部分が増えたので部分ごとに解説しましょー。

◆スイッチの操作:[キー押している]をOFFにする
◆条件分岐[↑キー押し時間]が1以上
 ◆スイッチの操作:[キー押している]をONにする
 ◆
:分岐終了

◆条件分岐[キー押している]がOFF
 ◆繰り返し処理
 ◆キー入力の処理:[キー入力受付] (待たない)
 ◆条件分岐:[キー入力受付] が0以外
  ◆繰り返しの中断
  ◆
 :分岐終了
 ◆ウェイト:0.0秒
 :以上繰り返し

:それ以外の場合
 ◆キー入力の処理:[キー入力受付] (待たない)
 ◆
:分岐終了

まずはこの部分です。
ここではキー入力を待つか待たないかを判別しています。

一行目で押しているかどうかを初期化します。

この文字の部分でなんらかのキーを押しっぱなしにしているかを判別します。
なぜ「【↑キー押し時間】が1以上」なのかというと
下半分でキーが押されているときに「【↑キー押し時間】が1以上になっているからです。
分かりにくいですね☆

この文字
の部分でキー入力の処理を分岐します。
【キー押している】がOFFのときは待って、【キー押している】がONの時は待ちません。

薄オレンジ
もはやピンクっぽい色で書いてあるとこは
とあるバグの防止用です。説明は省略しますっ(それでいいのか

◆条件分岐:[キー入力受付]が4
 ◆条件分岐:変数[↑キー押し時間]が0
  ◆※動作処理※
  ◆
 :分岐終了

 ◆変数の操作:[↑キー押し時間]加算(1)
 ◆条件分岐:変数[↑キー押し時間]が25以上
  ◆※動作処理※
  ◆ウェイト:0.0秒
  ◆
 :分岐終了
 ◆
:それ以外の場合(入力受付が4以外)
 ◆変数の操作:[↑キー押し時間]代入(0)
 ◆
:分岐終了

このエキゾチックな色の部分では、押したときの処理をしてます。
最初の分岐は説明不要でしょう。【キー入力受付】が4のときを判別しています。

最初の薄紫の部分でキーを押した瞬間の処理を行ってます。

次のとその下の薄紫で押しっぱ処理をしています。
で【↑キー押し時間】を1ずつ加算して
【↑キー押し時間】が25以上になった時に薄紫(2個目)の内容が実行されます。

条件分岐の"25"はおしっぱ処理が始まるまでの時間です。色々変えてみましょう。
「ウェイト」を大きくすれば移動間の時間がのびます。こちらも色々と変えてみましょう。

そして最後の三行なんですが
コレは一行目の「【キー入力】が4」とペアになってます。
要するに↑キーを押していないときに【↑キー押し時間】をリセット(0を代入)してるだけです。

4.そして伝説へ----------
てきとーなサンプルを置こうかと思ったんですが
気力がありませんでした。てへっ


なんかすごい長くなってしまいました。過去最長ですかね?

説明下手が災いしてよく分からなくなってるので
解説かっ飛ばして3の最初を参考にさえすればいいと思います!
PR

2008/10/08 20:02 | Comments(0) | TrackBack(0) | にっき

トラックバック

トラックバックURL:

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<ピスコラってみた | HOME | ポテトプラス>>
ブログ [PR]不動産売却 植毛