ページ 11

旧ゲームプログラミングの館 40aの質問

Posted: 2011年8月06日(土) 20:59
by apricot
質問があります。
旧ゲームプログラミングの館、40aの GetHitKeyStateAll_2という関数についてですが、
なぜ、Keyという変数に押したカウント数が入るのですか?

コード:

#include "DxLib.h"
 
int GetHitKeyStateAll_2(int KeyStateBuf[]){
        char GetHitKeyStateAll_Key[256];
        GetHitKeyStateAll( GetHitKeyStateAll_Key );
        for(int i=0;i<256;i++){
                if(GetHitKeyStateAll_Key[i]==1) KeyStateBuf[i]++;
                else                            KeyStateBuf[i]=0;
        }
        return 0;
}
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        
    int Key[256];
    
    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が押されていない
 
        DrawFormatString(0,0,GetColor(255,255,255),"%d",Key[KEY_INPUT_RETURN]);//エンター入力カウント
 
        if(Key[KEY_INPUT_RETURN]==1)//今の瞬間押されたら
            DrawBox(0,0,640,480,GetColor(255,255,255),TRUE);//画面全体を白い四角で表示
 
 
        ScreenFlip();
    }
 
    DxLib_End();
    return 0;
}
コードを見て、GetHitKeyStateAll_2(Key)としていますが、
これは引数として渡しているだけではないのですか?

ゲームプログラムの基本骨格はよく使わせてもらっていますが、よく分かっていませんでした。

お願いします。

Re: 旧ゲームプログラミングの館 40aの質問

Posted: 2011年8月06日(土) 21:34
by Dixq (管理人)
> apricotさん

こんにちは。

それは、「参照渡し」「ポインタ」などのキーワードで調べれば分かります。

コード:

#include <stdio.h>

void calc( int &a ){
	a = 1;
}
int main(){
	int x=2;
	calc(x);
	printf("%d",x);
	return 0;
}
この実行結果は「1」になります。
Keyが示すものは、配列の先頭アドレスですよね。
で、関数先ではKeyStateBufというアドレスの入れ物を用意しているわけですから、Keyと同じアドレスを示すことになります。
KeyStateBufが示すものと、Keyが示すものは同じですから、
GetHitKeyStateAll_2関数内で変更を加えてもKeyに影響するというわけです。

Re: 旧ゲームプログラミングの館 40aの質問

Posted: 2011年8月06日(土) 22:48
by apricot
 すいません。
 まだよく分かっていません。

 しかし、自分の知識の無さが分かったので、
 もっと勉強してから、質問するようにします。
Dixq (管理人) さんが書きました:> apricotさん
Keyが示すものは、配列の先頭アドレスですよね。
ここら辺を勉強してきます。
御手を煩わせてすいませんでした。

解決とさせていただきます。