キー制御について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
JON
記事: 8
登録日時: 9年前

キー制御について

#1

投稿記事 by JON » 9年前

DXライブラリにて、エンターで進む処理について質問です。
RPGでエンターで戦うボタンを選択し、攻撃対象を選んでからエンターで攻撃。のような、エンターでの操作が続く場合です。GetHitKeyStateAllでキーの状態を取得し、if(Key[KEY_INPUT_RETURN] == 1)を二回続けてしまうと一度に処理されてしまうので、今はカウントを数えたりフラグを立てたりで処理しています。しかし、プログラムが長くなるにつれごちゃごちゃしてくるので他にもっと良い考えがあるのではないかと感じています。

そこで、同じキーで進める操作の場合はどのようにするのがベストな考えなんでしょうか?

zxc
記事: 79
登録日時: 11年前
住所: 日本の背骨(?)あたり

Re: キー制御について

#2

投稿記事 by zxc » 9年前

 基本的にカウントかフラグで管理するのが分かりやすく一般的な方法だと思いますし、それでごちゃごちゃするというのは別の問題だと思います。何度も登場する処理を関数やクラスと言う容易に再利用できる形にしないことがごちゃごちゃしたコードの原因ではないか、もう一度コードを見直してみてはいかがでしょうか。

アバター
Ketty
記事: 102
登録日時: 10年前

Re: キー制御について

#3

投稿記事 by Ketty » 9年前

ソースがごちゃごちゃするというのは、
if(Key[KEY_INPUT_RETURN] == 1)を二回続けてしまうと一度に処理されてしまうので、今はカウントを数えたりフラグを立てたりで処理しています
これを、ゲーム本編の処理に書きこんでいるから、ごちゃごちゃするとおっしゃってるのでしょうか(?_?)
であれば、関数化するなりクラス化するなりして、分離すればいいと思います。

ベストのやり方は知らないですが、
私の場合は、キー入力管理の処理をクラス化して、
キークラス.isPressed()とか、キークラス.isPressedOnce()といった具合に、
押されたよ、とか、1回だけおされたよ、とかいうのをメソッドにしますかね(^v^)
JONさんが「ごちゃごちゃしてる」とおっしゃる部分を、キークラスに引き受けてもらう感じです。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: キー制御について

#4

投稿記事 by softya(ソフト屋) » 9年前

このサイトのコンテンツである「ゲームプログラミングの館」
http://dixq.net/g/
この中にある「 DXライブラリの関数の使い方(基本) 」の「全てのキーの入力状態を取得する」は参考にならなかったのでしょうか?
狙いとなる機能を実現していると思いますが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

JON
記事: 8
登録日時: 9年前

Re: キー制御について

#5

投稿記事 by JON » 9年前

カウントやフラグで管理するのが一般的なんですね。ごちゃごちゃするというのは、フラグの数が多くなってしまうということでした。言葉足らずですみません。

「DXライブラリの関数の使い方(基本)」の「全てのキーの入力状態を取得する」のところは参考にさせていただいています。選択画面など一つの処理のときや、連続する処理に必要なキーが違うときは問題ないのですが、違う処理で同じキーを使うことが続く場合に問題が生じます。
キーを押して最初の処理は通って、次の処理は一回キーを離してもう一度押して通したいと考えています。

やはりフラグなどは処理ごとに用意したほうが管理しやすいですよね?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: キー制御について

#6

投稿記事 by softya(ソフト屋) » 9年前

> キーを押して最初の処理は通って、次の処理は一回キーを離してもう一度押して通したいと考えています。

それこそキーを離している状態を監視する関数を用意するだけす。
1.状態0 → 条件(ENTERキーカウント==1) → 状態1
2.状態1 → 条件(ENTERキーカウント>1) → 状態2
3. 状態1か2 → 条件(ENTERキーカウント==0) → 状態0
これを何らかの関数やクラスでラップしてしまえば、現在が状態1かを返す関数を用意するだけで目的の動作は達成できませんか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

JON
記事: 8
登録日時: 9年前

Re: キー制御について

#7

投稿記事 by JON » 9年前

なるほど、参考になります。

頭ではある程度形になっていても実際にプログラムを書いてみるとなかなか難しいところもあります。
色々考えながら試行錯誤してみます。

JON
記事: 8
登録日時: 9年前

Re: キー制御について

#8

投稿記事 by JON » 9年前

解決押し忘れてました。

また行き詰ったときはよろしくお願いします。

閉鎖

“C言語何でも質問掲示板” へ戻る