キー入力後動作をSwitchを使ってやるには?

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
史上最悪のデスペナ
記事: 521
登録日時: 14年前

キー入力後動作をSwitchを使ってやるには?

#1

投稿記事 by 史上最悪のデスペナ » 14年前

ここ(http://www.plustarnet.com/aspil/Programming/c11.htm)の3つ目のサンプルコードの下で、

最初から全部判定していかなければなりません。つまり、無駄にCPUを使用することにもなりかねません。

と書かれています。まあ、これを鵜呑みにしたわけですが、
DXLibで、キー入力判定後の動作(例えばWを押したらキャラが前進するとか)をswitchを使って場合分けするにはどうしたらいいでしょうか?

こうではなく
GetHitKeyStateAll( KeyBuf )
if( KeyBuf[KEY_INPUT_W] == 1 )
{
前に進む処理
}
if( KeyBuf[KEY_INPUT_S] == 1 )
{
後ろに進む処理
}
if( KeyBuf[KEY_INPUT_A] == 1 )
{
左に進む処理
}
if( KeyBuf[KEY_INPUT_W] == 1 )
{
右に進む処理
}

こんな感じにしたいのです。
↓文法(switchに使えるのが整数のみ)という点では間違ってますがやりたいことは伝わるでしょうか?
switch(KeyBuf)
case W
前に進む処理
break:
以下略

なにかいい方法はないでしょうか?

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

Re: キー入力後動作をSwitchを使ってやるには?

#2

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

その手の処理の速度はさほど気にしなくて良いのですよ。
ここを気にするなら、当たり判定とかもっと速度に関係する所を意識すべきだと思います。

逆に

コード:

switch(KeyBuf)
case W
前に進む処理
break:
以下略
だと前処理が必要だったり、同時に2つのキーを押せ無くなるなど実害のほうが多いと思います。
switch(KeyBuf)だと一意の値しか処理できませんからね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: キー入力後動作をSwitchを使ってやるには?

#3

投稿記事 by h2so5 » 14年前

無理にやるとしたらこんな感じでしょうか。
同時押しの処理が面倒になるだけですが...

コード:

	int KeyBufInt = KeyBuf[KEY_INPUT_W] * 1 +
					KeyBuf[KEY_INPUT_S] * 2 +
					KeyBuf[KEY_INPUT_A] * 4 +
					KeyBuf[KEY_INPUT_D] * 8;
	
	switch (KeyBufInt) {
		case 1:
			//前に進む処理
			break;
		case 2:
			//後ろに進む処理
			break;
		case 4:
			//左に進む処理
			break;
		case 8:
			//右に進む処理
			break;
		default:
			break;
	}

史上最悪のデスペナ
記事: 521
登録日時: 14年前

Re: キー入力後動作をSwitchを使ってやるには?

#4

投稿記事 by 史上最悪のデスペナ » 14年前

お二方にいただいた回答により、
やはり、無理(というか無駄)という結論に達しました。
C++ももうちょっと使い勝手がいいといいなぁと身勝手なことを思ってしまいました^^;

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

Re: キー入力後動作をSwitchを使ってやるには?

#5

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

メインテーマを使い勝手なのか、CPUの負荷なのか明確にされたほうが良いと思います。
大体使い勝手の良い方法はCPU負荷を必要とします。
今回の場合は、どちらにしてもあまり良い方法が無さそうですが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: キー入力後動作をSwitchを使ってやるには?

#6

投稿記事 by ISLe » 14年前

h2so5さんのコードでcase 5/*1+4*/で左前というふうに斜め判定できますし、左右同時押しのような有り得ない入力を弾けるので便利だと思いますけど。

プログラミング言語とは関係のない話ですね。
キーの状態を配列に返すというDXライブラリ、というかWin32 APIの仕様の問題です。

キーコンフィグがあったり、壁伝い移動とか斜め移動速度補正とかしたら、もっと複雑になるので、キー入力も(ついでにパッド入力も)仮想化したモジュールを作ってしまえば良いと思います。

史上最悪のデスペナ
記事: 521
登録日時: 14年前

Re: キー入力後動作をSwitchを使ってやるには?

#7

投稿記事 by 史上最悪のデスペナ » 14年前

ありがとうございます。
ゲームがある程度完成したら、か、行き詰ったとき、暇なときにまた考えてみます

閉鎖

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