ページ 11

龍神録2章のKeyについて

Posted: 2009年8月05日(水) 11:47
by
はじめまして、2章のプログラムのKeyの所がよくわからなかったので質問しました。

//GetHitKeyStateAll_2という自作関数を作成
int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[/url]){
    char GetHitKeyStateAll_Key[256];   //char型のGetHitKeyStateAll_Key配列を作成
    GetHitKeyStateAll( GetHitKeyStateAll_Key );   //GetHitStateAll関数にGetHitKeyStateAll_Key配列を渡すことにより、
                                   //GetHitKeyStateAll_Key配列[/url]の中にはKEY_INPUT_ESCAPE等
                                  //全てのキーの入力状態(0か1)が入っている

    for(int i=0;i<256;i++){    //↓押されているキーがある場合は引数GetHitKeyStateAll_InputKey[/url]に1足す
        if(GetHitKeyStateAll_Key==1) GetHitKeyStateAll_InputKey++;
        else                  GetHitKeyStateAll_InputKey=0; //何も押されてなければ引数は0になる
    }
    return 0;
}

↑ここはコメントに書いているような理解で正しいですか?
また、

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
    ChangeWindowMode(TRUE);//ウィンドウモード
    if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化

while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
       //↑メッセージ処理        ↑画面をクリア       ↑入力状態を保存       ↑ESCが押されていない

というコードで、コメントに入力状態を保存と書いてありますが、どういうことなのでしょうか・・・?
自分なりに理解しようとしたところ、例えばキーが4つ押されていればGetHitKeyStateAll_2(Key)の
引数Keyに4という数字が入るのでwhile文は実行されないということだと思いました。

また、このような処理は何のために行うのでしょうか?実行したときに何かキーが押されていた場合実行できないようにするためなのでしょうか?もしそうなのであれば、なぜその処理を行う必要があるのでしょうか?・・・

まだプログラミングを始めたばかりなので、初歩的な質問ですが教えていただけるとうれしいです。

Re:龍神録2章のKeyについて

Posted: 2009年8月05日(水) 12:03
by ねこ
<↑ここはコメントに書いているような理解で正しいですか?
その理解で大丈夫です。

<引数Keyに4という数字が入るのでwhile文は実行されないということだと思いました。
これは間違いです。「GetHitKeyStateAll_2」関数は「常に0を返す」のでそこの判定は常に「正」になります。
本来はwhileの判定に有る必要性はありません。
ただESCAPEキーが押された場合にwhileに入らないようにする必要があるため、ESCAPEキーが押されているかを事前に取得するため、判定式に記述されています。
なので、下記のように記述しても同様の処理となります。
while(ProcessMessage()==0){
	ClearDrawScreen();
	GetHitKeyStateAll_2(Key);
	if( Key[KEY_INPUT_ESCAPE] == 1)
		break; 
}

Re:龍神録2章のKeyについて

Posted: 2009年8月05日(水) 12:14
by
>>ESCAPEキーが押された場合にwhileに入らないようにする必要があるため、ESCAPEキーが押されているかを事前に取得するため、判定式に記述されています。
そういうことだったのですね。
ねこさんとてもわかりやすく説明して下さりありがとうございました!