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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
G.G.
記事: 63
登録日時: 14年前
連絡を取る:

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

#1

投稿記事 by G.G. » 14年前

ゲームパッドを対応させたいので、竜神禄のコードを参考にしてみたのですが、
上手くいかないみたいで、正しいコードを教えて欲しいです。

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

添付したプロジェクトは新ゲームプログラムのサンプルをいじったものです。
添付ファイル
GameProg.zip
(29.28 MiB) ダウンロード数: 139 回

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#2

投稿記事 by みけCAT » 14年前

とりあえず

コード:

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]));
    }
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)


アバター
G.G.
記事: 63
登録日時: 14年前
連絡を取る:

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

#4

投稿記事 by G.G. » 14年前

エラーでした・・・

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#5

投稿記事 by みけCAT » 14年前

エラーメッセージは何ですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
G.G.
記事: 63
登録日時: 14年前
連絡を取る:

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

#6

投稿記事 by G.G. » 14年前

コード:

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 スキップ ==========
こんな感じです。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#7

投稿記事 by みけCAT » 14年前

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;
        }
	}
}
にしたらどうですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
G.G.
記事: 63
登録日時: 14年前
連絡を取る:

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

#8

投稿記事 by G.G. » 14年前

すみません、
int i が邪魔だったみたいです。
でも実行はできましたが、上方向に移動しませんでした・・・

アバター
G.G.
記事: 63
登録日時: 14年前
連絡を取る:

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

#9

投稿記事 by G.G. » 14年前

とりあえず、今までの結果のプロジェクトです。
添付ファイル
GameProg.zip
(30.6 MiB) ダウンロード数: 109 回

白い時空
記事: 18
登録日時: 14年前
住所: 埼玉県さいたま市

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

#10

投稿記事 by 白い時空 » 14年前

見てて気づいたのですが

コード:

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

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

アバター
G.G.
記事: 63
登録日時: 14年前
連絡を取る:

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

#11

投稿記事 by G.G. » 14年前

>白い時空さん

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

閉鎖

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