ジョイパッドコンフィグプログラムが上手くいかない

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

ジョイパッドコンフィグプログラムが上手くいかない

#1

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

たびたびすみません;
DXLIBで製作しています。

例の音ゲーでジョイパッドのコンフィグプログラムを作ったのですが、
上手く動作しませんでした・・・。

症状としては、
・一番初めのコンフィグがボタン0番以外が無効(押しても反応なし)
・次のコンフィグに移行するとボタン全てが無効。
・ボタン全ての入力状態fancがボタンを離しても0に戻らない。

これがそのコードです。

コード:

static int fanc=0;

int ReturnPadState(){
	for(int i=0;i<PAD_MAX;i++){
		if(CheckStatePad(i)>0){
			fanc++;
			return i;
		}else{
			fanc=0;
			return -1;
		}

	}
}

static int num=0;

void Configpad_main(configpad_t *configpad,int *state){

	char string[8][128] = {
		"UP",
		"LEFT",
		"DOWN",
		"RIGHT",
		"△",
		"□",
		"×",
		"○",
	};

	int number[8] = {
		configpad->up,configpad->left,configpad->down,configpad->right,
		configpad->sankaku,configpad->sikaku,configpad->batu,configpad->maru,
	};

	for(int i=0;i<8;i++){
		DrawFormatString(0,i*20,GetColor(255,255,255),"%s = %d",string[i],number[i]);
	}

	for(int n=0;n<PAD_MAX;n++){
		DrawFormatString(300,n*15,GetColor(255,255,255),"pad.key[%d] = %d",n,pad.key[n]);
	}

	DrawFormatString(0,300,GetColor(255,255,255),"NUM = %d",num);
	DrawFormatString(0,315,GetColor(255,255,255),"fanc = %d",fanc);

	switch(num){
	case 0://UP
		if(fanc==0){
			if(ReturnPadState()>=0){
				configpad->up=ReturnPadState();
				num+=1;
			}
		}
		break;
	case 1://LEFT
		if(fanc==0){
			if(ReturnPadState()>=0){
				configpad->left=ReturnPadState();
				num+=1;
			}
		}
		break;
	case 2://DOWN
		if(fanc==0){
			if(ReturnPadState()>=0){
				configpad->down=ReturnPadState();
				num+=1;
			}
		}
		break;
	case 3://RIGHT
		if(fanc==0){
			if(ReturnPadState()>=0){
				configpad->right=ReturnPadState();
				num+=1;
			}
		}
		break;
	case 4://△
		if(fanc==0){
			if(ReturnPadState()>=0){
				configpad->sankaku=ReturnPadState();
				num+=1;
			}
		}
		break;
	case 5://□
		if(fanc==0){
			if(ReturnPadState()>=0){
				configpad->sikaku=ReturnPadState();
				num+=1;
			}
		}
		break;
	case 6://×
		if(fanc==0){
			if(ReturnPadState()>=0){
				configpad->batu=ReturnPadState();
				num+=1;
			}
		}
		break;
	case 7://○
		if(fanc==0){
			if(ReturnPadState()>=0){
				configpad->maru=ReturnPadState();
				num+=1;
			}
		}
		break;
	case 8:
		*state=1;
		num=0;
		break;
	}

}

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

Re: ジョイパッドコンフィグプログラムが上手くいかない

#2

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

ReturnPadState()>=0の時にはfancは0ではなく、この状態で次のループに入るので、
case 0~case 7の中身のどれも実行されなくなります。
この関数の外でfancを0にしているなら別ですが。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

Re: ジョイパッドコンフィグプログラムが上手くいかない

#3

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

少し仕様が変わりましたが、何とかコンフィグすることができました。

閉鎖

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