トップページ > 過去ログ > 記事閲覧
キーの名前を取得
名前:蒼熊 日時: 2010/02/19 23:39

キーの名前を取得するのに、良い方法はあるでしょうか。 CheckHitKey等で用いるキーコードを入れると、"ESCAPE" "A" "SPACE" などと返したいのです。 思いつく手段としてはswitchで全てのケースにいちいち当てはめていく力技くらいですが……何か他に良い方法はあるでしょうか。 宜しくお願いします

Page: 1 |

Re: キーの名前を取得 ( No.1 )
名前:sy(サイ) 日時:2010/02/20 01:47

まず、文字列とint型を格納できる構造体を用意して、その構造体の配列を用意します。 そこに"ESCAPE" "A" "SPACE"等と文字列を入れてそれに対応したキー(KEY_INPUT_RETURNなど)をintの方に格納します。 適当な関数を作って引数にキーを入力。引数に持ってきたキーと先ほど用意した構造体の配列のキーとfor文でぐるぐる認証。 これだけ。でも、これってDXLibの中身見て学んだのですw キーコンフィグでもお作りになるのですか?
Re: キーの名前を取得 ( No.2 )
名前:いっち 日時:2010/02/20 15:11

DxLibの内部にキーに対応した文字列を取得する機能は無いので、自前で文字列を用意する必要があります。 となると、キーのIDから対応する文字列を導く式が無い限り、switch文を使ったような総当り的なやり方に なるのは致し方ないのではないかと思います。 せっかくなので、私は配列を使ってやってみました。 //-- 以下ソース --// // KEY ID:0に未定義のキーコードを割り当てていますが、もしかしたら問題あるかもしれません。 // JOYPADには対応していません #include "DxLib.h" class KEY_STRING { const static int key_max = 256; const static int KEY_INPUT_UNKNOWN = 0; const char* name[key_max]; KEY_STRING( KEY_STRING& copy ){ }; public: KEY_STRING( void ); ~KEY_STRING( void ) {}; const char* operator ()( int id ) const { if ( id < 0 || key_max <= id ) id = KEY_INPUT_UNKNOWN; if ( !name[id] ) id = KEY_INPUT_UNKNOWN; return name[id]; } }; KEY_STRING::KEY_STRING( void ) { memset( name, 0, sizeof(const char*) * key_max ); name[KEY_INPUT_UNKNOWN] = "未定義キー"; name[KEY_INPUT_BACK] = "バックスペースキー"; name[KEY_INPUT_TAB] = "タブキー"; name[KEY_INPUT_RETURN] = "エンターキー"; // 以下にキーと文字列の対応を羅列 } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( TRUE ); if ( DxLib_Init( ) == -1 ) return -1; SetDrawScreen( DX_SCREEN_BACK ); char key_state[256]; KEY_STRING KeyId2Str; while ( ProcessMessage( ) == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { ClearDrawScreen( ); GetHitKeyStateAll( key_state ); for ( int i = 0, y = 0; i < 256; i++ ) { if ( key_state[i] ) DrawString( 0, 20 * y++, KeyId2Str( i ), GetColor( 255, 255, 255 ) ); } ScreenFlip( ); } DxLib_End( ); return 0; }
Re: キーの名前を取得 ( No.3 )
名前:蒼熊 日時:2010/02/20 21:31

ありがとうございます。動作速度を考えて結局DxLib.hから抜き取った文字列を上手く置き換えてswitch文を作りました。 配列データも考えたのですが空白の部分が多いようなので…… >キーコンフィグでもお作りになるのですか? その通りです。後、ゲーム内ガイドなどでも……。

Page: 1 |