DXライブラリにて、エンターで進む処理について質問です。
RPGでエンターで戦うボタンを選択し、攻撃対象を選んでからエンターで攻撃。のような、エンターでの操作が続く場合です。GetHitKeyStateAllでキーの状態を取得し、if(Key[KEY_INPUT_RETURN] == 1)を二回続けてしまうと一度に処理されてしまうので、今はカウントを数えたりフラグを立てたりで処理しています。しかし、プログラムが長くなるにつれごちゃごちゃしてくるので他にもっと良い考えがあるのではないかと感じています。
そこで、同じキーで進める操作の場合はどのようにするのがベストな考えなんでしょうか?
キー制御について
Re: キー制御について
基本的にカウントかフラグで管理するのが分かりやすく一般的な方法だと思いますし、それでごちゃごちゃするというのは別の問題だと思います。何度も登場する処理を関数やクラスと言う容易に再利用できる形にしないことがごちゃごちゃしたコードの原因ではないか、もう一度コードを見直してみてはいかがでしょうか。
Re: キー制御について
ソースがごちゃごちゃするというのは、
であれば、関数化するなりクラス化するなりして、分離すればいいと思います。
ベストのやり方は知らないですが、
私の場合は、キー入力管理の処理をクラス化して、
キークラス.isPressed()とか、キークラス.isPressedOnce()といった具合に、
押されたよ、とか、1回だけおされたよ、とかいうのをメソッドにしますかね(^v^)
JONさんが「ごちゃごちゃしてる」とおっしゃる部分を、キークラスに引き受けてもらう感じです。
これを、ゲーム本編の処理に書きこんでいるから、ごちゃごちゃするとおっしゃってるのでしょうか(?_?)if(Key[KEY_INPUT_RETURN] == 1)を二回続けてしまうと一度に処理されてしまうので、今はカウントを数えたりフラグを立てたりで処理しています
であれば、関数化するなりクラス化するなりして、分離すればいいと思います。
ベストのやり方は知らないですが、
私の場合は、キー入力管理の処理をクラス化して、
キークラス.isPressed()とか、キークラス.isPressedOnce()といった具合に、
押されたよ、とか、1回だけおされたよ、とかいうのをメソッドにしますかね(^v^)
JONさんが「ごちゃごちゃしてる」とおっしゃる部分を、キークラスに引き受けてもらう感じです。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: キー制御について
このサイトのコンテンツである「ゲームプログラミングの館」
http://dixq.net/g/
この中にある「 DXライブラリの関数の使い方(基本) 」の「全てのキーの入力状態を取得する」は参考にならなかったのでしょうか?
狙いとなる機能を実現していると思いますが。
http://dixq.net/g/
この中にある「 DXライブラリの関数の使い方(基本) 」の「全てのキーの入力状態を取得する」は参考にならなかったのでしょうか?
狙いとなる機能を実現していると思いますが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: キー制御について
カウントやフラグで管理するのが一般的なんですね。ごちゃごちゃするというのは、フラグの数が多くなってしまうということでした。言葉足らずですみません。
「DXライブラリの関数の使い方(基本)」の「全てのキーの入力状態を取得する」のところは参考にさせていただいています。選択画面など一つの処理のときや、連続する処理に必要なキーが違うときは問題ないのですが、違う処理で同じキーを使うことが続く場合に問題が生じます。
キーを押して最初の処理は通って、次の処理は一回キーを離してもう一度押して通したいと考えています。
やはりフラグなどは処理ごとに用意したほうが管理しやすいですよね?
「DXライブラリの関数の使い方(基本)」の「全てのキーの入力状態を取得する」のところは参考にさせていただいています。選択画面など一つの処理のときや、連続する処理に必要なキーが違うときは問題ないのですが、違う処理で同じキーを使うことが続く場合に問題が生じます。
キーを押して最初の処理は通って、次の処理は一回キーを離してもう一度押して通したいと考えています。
やはりフラグなどは処理ごとに用意したほうが管理しやすいですよね?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: キー制御について
> キーを押して最初の処理は通って、次の処理は一回キーを離してもう一度押して通したいと考えています。
それこそキーを離している状態を監視する関数を用意するだけす。
1.状態0 → 条件(ENTERキーカウント==1) → 状態1
2.状態1 → 条件(ENTERキーカウント>1) → 状態2
3. 状態1か2 → 条件(ENTERキーカウント==0) → 状態0
これを何らかの関数やクラスでラップしてしまえば、現在が状態1かを返す関数を用意するだけで目的の動作は達成できませんか?
それこそキーを離している状態を監視する関数を用意するだけす。
1.状態0 → 条件(ENTERキーカウント==1) → 状態1
2.状態1 → 条件(ENTERキーカウント>1) → 状態2
3. 状態1か2 → 条件(ENTERキーカウント==0) → 状態0
これを何らかの関数やクラスでラップしてしまえば、現在が状態1かを返す関数を用意するだけで目的の動作は達成できませんか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: キー制御について
なるほど、参考になります。
頭ではある程度形になっていても実際にプログラムを書いてみるとなかなか難しいところもあります。
色々考えながら試行錯誤してみます。
頭ではある程度形になっていても実際にプログラムを書いてみるとなかなか難しいところもあります。
色々考えながら試行錯誤してみます。