ページ 11

ゲームパッド対応させたいです。

Posted: 2011年6月16日(木) 21:44
by G.G.
ゲームパッドを対応させたいので、竜神禄のコードを参考にしてみたのですが、
上手くいかないみたいで、正しいコードを教えて欲しいです。

あと、作っているゲームは対戦主体のゲームなんで、
パッド1、キーボードは1P、パッド2以降は2P~という風にする予定です。

添付したプロジェクトは新ゲームプログラムのサンプルをいじったものです。

Re: ゲームパッド対応させたいです。

Posted: 2011年6月16日(木) 21:52
by みけCAT
とりあえず

コード:

void GetHitPadStateAll(Player_t *Player){
	int KEY[4];
	KEY[0]=KEY_INPUT_LEFT;KEY[1]=KEY_INPUT_UP;
	KEY[2]=KEY_INPUT_RIGHT;KEY[3]=KEY_INPUT_DOWN;
	int i,PadInput,mul=0;
	PadInput=GetJoypadInputState(DX_INPUT_PAD1);
	for(i=0;i<4;i++){
		if(PadInput&mul) Player->key[i]++;
		else			 Player->key[i]=0;
		mul*=2;
	}
	for(int n=0;n<4;n++){
		input_pad_or_key(&Player->key[Player->configpad[n]],Keyboard_Get(KEY[n]));
	}
}
このコードで、変数mulがいつまでたっても0のままなのが問題だと思います。

追記
「正しいコード」はこんな感じでしょうか?適当です。

コード:

void GetHitPadStateAll(Player_t *Player){
    int KEY[4];
    KEY[0]=KEY_INPUT_LEFT;KEY[1]=KEY_INPUT_UP;
    KEY[2]=KEY_INPUT_RIGHT;KEY[3]=KEY_INPUT_DOWN;
    int i,PadInput;
    PadInput=GetJoypadInputState(DX_INPUT_PAD1);
    for(i=0;i<4;i++){
        if(PadInput&(1<<i)) Player->key[i]++;
        else             Player->key[i]=0;
    }
    for(int n=0;n<4;n++){
        input_pad_or_key(&Player->key[Player->configpad[n]],Keyboard_Get(KEY[n]));
    }
}

Re: ゲームパッド対応させたいです。

Posted: 2011年6月16日(木) 21:54
by G.G.
試してみます

Re: ゲームパッド対応させたいです。

Posted: 2011年6月16日(木) 21:56
by G.G.
エラーでした・・・

Re: ゲームパッド対応させたいです。

Posted: 2011年6月16日(木) 21:58
by みけCAT
エラーメッセージは何ですか?

Re: ゲームパッド対応させたいです。

Posted: 2011年6月16日(木) 22:03
by G.G.

コード:

1>------ ビルド開始: プロジェクト: GameProg, 構成: Debug Win32 ------
1>  Padconfig.cpp
1>test.obj : error LNK2019: 未解決の外部シンボル "void __cdecl Player_Calc(struct Player_t *)" (?Player_Calc@@YAXPAUPlayer_t@@@Z) が関数 _WinMain@16 で参照されました。
1>D:\ME\GameProg\Debug\GameProg.exe : fatal error LNK1120: 外部参照 1 が未解決です。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
こんな感じです。

Re: ゲームパッド対応させたいです。

Posted: 2011年6月16日(木) 22:03
by みけCAT
Player.cpp内の

コード:

// 動きを計算する
void Player_Calc(Player_t *Player,int i){
	if (i == 1){
        if( CheckStatePad_Player1( Player->configpad[3],Player ) > 0 ){
                Player->y-=3;
        }
        if( Keyboard_Get( KEY_INPUT_DOWN ) > 0 ){
                Player->y+=3;
        }
		if( Keyboard_Get( KEY_INPUT_LEFT ) > 0 ){
                Player->x-=3;
        }
		if( Keyboard_Get( KEY_INPUT_RIGHT ) > 0 ){
                Player->x+=3;
        }
	}
}

コード:

// 動きを計算する
void Player_Calc(Player_t *Player){
	if (i == 1){
        if( CheckStatePad_Player1( Player->configpad[3],Player ) > 0 ){
                Player->y-=3;
        }
        if( Keyboard_Get( KEY_INPUT_DOWN ) > 0 ){
                Player->y+=3;
        }
		if( Keyboard_Get( KEY_INPUT_LEFT ) > 0 ){
                Player->x-=3;
        }
		if( Keyboard_Get( KEY_INPUT_RIGHT ) > 0 ){
                Player->x+=3;
        }
	}
}
にしたらどうですか?

Re: ゲームパッド対応させたいです。

Posted: 2011年6月16日(木) 22:07
by G.G.
すみません、
int i が邪魔だったみたいです。
でも実行はできましたが、上方向に移動しませんでした・・・

Re: ゲームパッド対応させたいです。

Posted: 2011年6月16日(木) 22:24
by G.G.
とりあえず、今までの結果のプロジェクトです。

Re: ゲームパッド対応させたいです。

Posted: 2011年6月16日(木) 23:20
by 白い時空
見てて気づいたのですが

コード:

PadInput=GetJoypadInputState(DX_INPUT_PAD1);
GetJoypadInputStateの引数がDX_INPUT_PAD1で固定になってます。

パッド1の情報を取得する場合はDX_INPUT_PAD1、
パッド2の情報を取得する場合はDX_INPUT_PAD2、
のように変えるべきかと。

Re: ゲームパッド対応させたいです。

Posted: 2011年6月17日(金) 23:43
by G.G.
>白い時空さん

とりあえずパッド対応のテストだったんで、パッド1のみでやっていました。
とりあえず解決次第、引数を変更できるようにして、
次にあるinput_pad_or_keyの部分はパッド2以降は使えないようにしておきます。