キーコンフィグについて

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

キーコンフィグについて

#1

投稿記事 by 長峰 » 12年前

新・ゲームプログラミングの館 [http://dixq.net/g/index.html]

上記サイトを参考に、キーの入力フレームを取得するクラスを作成しました。

コード:

class Keyboard{
	static const int num=256;//有効なキーの総数
	unsigned int press[num],release[num];//フレーム数を格納する変数
	bool checkValid(int keycode){return(0<=keycode && keycode<num);}//有効なキーかチェック
public:
	Keyboard();
	void update();
	int on(int keycode);//対応するキーの押されているフレーム数を取得
	int off(int keycode);//対応するキーの離されているフレーム数を取得
};

Keyboard::Keyboard(){
	memset(press,0,sizeof(press));
	memset(release,0,sizeof(release));
}

int Keyboard::on(int keycode){
	return Keyboard::checkValid(keyCode)? press[keyCode]:-1;
}

int Keyboard::off(int keycode){
	return Keyboard::checkValid(keycode)? release[keycode]:-1;
}

void Keyboard::update(){
	char tmp[num];
	GetHitKeyStateAll(tmp);
	for(int i=0;i<num;i++){
		if(tmp[i]){
			if(release[i]>0)release[i]=0;
			press[i]++;
		}else{
			if(press[i]>0)press[i]=0;
			release[i]++;
		}
	}
}
次に、キー自体の入力を入れ替える、キーコンフィグ機能を実装しようと思ったのですが、
いまいちやり方が思いつきません。

私としては、Keyboard::onやoffに与える引数を変える方法は取りたくないので、
デフォルトのキーをそのまま引数に出来るよう、
Keyboard::onやoffのメンバ関数自体を改良していきたいと思っています。

前置きが長くなりましたが、
Keyboard::on(KEY_INPUT_RIGHT)の返却値を"KEY_INPUT_LEFT"のフレーム数に対応させるような方法を教えて下さい。

また出来れば、皆さんがどのような方法を採用しているかも知りたいです。
回答よろしくお願いします。

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

Re: キーコンフィグについて

#2

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

> デフォルトのキーをそのまま引数に出来るよう、

それは、それでデバッグ時にややこしい気がしますが、キーの変換対応テーブルをクラス内で保持していて、変更情報を設定するメンバ関数を用意すれば良いんじゃないでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

長峰
記事: 32
登録日時: 12年前

Re: キーコンフィグについて

#3

投稿記事 by 長峰 » 12年前

softyaさん回答ありがとうございます。
softya(ソフト屋) さんが書きました: キーの変換対応テーブルをクラス内で保持して
言葉がわからず、うまく説明出来ませんでしたが、まさにその様なことを考えていました!

追加質問になって申し訳ないですが、
変換対応テーブルというのは、どのような形で用意すればいいのでしょうか。

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

Re: キーコンフィグについて

#4

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

KEY_INPUT_RIGHTなどはint型の数値ですから、数値→数値変換なので、int配列で良いんじゃないでしょうか。
上限も256までなので、固定の配列で良いと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

長峰
記事: 32
登録日時: 12年前

Re: キーコンフィグについて

#5

投稿記事 by 長峰 » 12年前

softya(ソフト屋) さんが書きました:KEY_INPUT_RIGHTなどはint型の数値ですから、数値→数値変換なので、int配列で良いんじゃないでしょうか。
上限も256までなので、固定の配列で良いと思います。
KEY_INPUT_RIGHTは数値だったのですね、それなら出来そうな気がしてきました。

まだいくつか考慮すべきことはあると思いますが
作り方のイメージがつきましたので、解決とさせて頂きます。

softyaさん、わかりやすく教えてくださりありがとうございました。

閉鎖

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