キー入力とパッド入力の拡張

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
智寛

キー入力とパッド入力の拡張

#1

投稿記事 by 智寛 » 13年前

龍神録で2体いる自機を別々のキー入力、および別々のパッドで動かしたいと思っています。
そこで最初に1Pと2Pで別々のキーを使って動かそうとしているのですが、上手くいきません。

key.cpp内の GetHitPadStateAll() の処理の中にある
input_pad_or_key(&pad.key[configpad.left] ,CheckStateKey(KEY_INPUT_LEFT ));
の部分を
input_pad_or_key(&pad.key[configpad[0].left] ,CheckStateKey(KEY_INPUT_LEFT ));
input_pad_or_key(&pad.key[configpad[1].left] ,CheckStateKey(KEY_INPUT_A ));
という形に変更して2倍に増やし、他のcpp内にあるキーを入力する部分もループ分を入れています。
key.cppに関してはこれ以外改造はしていません。

しかし、上の状態でコンパイルしてキーボードの←を押すと、両方のキャラが移動してしまいます。
他のショットボタンなども同じ状態です。
何か足りないのでしょうか? どうかご教授お願いします。

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

Re: キー入力とパッド入力の拡張

#2

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

これだけでは分かりにくいです。
ソース全体をここにあげられませんか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: キー入力とパッド入力の拡張

#3

投稿記事 by h2so5 » 13年前

char.cppの部分はどのように改造しているのですか?

智寛

Re: キー入力とパッド入力の拡張

#4

投稿記事 by 智寛 » 13年前

>みけCAT様
ソースコードを上げたいと思うのですが、やり方がわからなくて上げられません。ごめんなさい。

>h2so5様

コード:

#include "../include/GV.h"

extern void enter_char_item();//(39章)

//キャラのアニメーション処理
void calc_ch(){
	for(int i=0;i<CHARA_MAX;i++){
        if(ch[i].flag==1){//喰らいボム受付中なら
            bright_set.brt=80;//暗く
    		if(ch[i].cnt>20){
				//喰らいボムが終わるとダメージ
	    		ch[i].life  -=100;
				//ライフが残っていたら
				if(ch[i].life>0){
    		    	ch[i].flag   =0;
                    bright_set.brt=255;
                    ch[i].mutekicnt++;//無敵状態へ
				}
				//ライフが無くなったら
		        else if(ch[i].life<=0){//0.33秒喰らいボムを受け付ける
                    ch[i].flag   =2;    //1:喰らいボム受付中 2:死んで浮き上がり中
                    ch[i].cnt    =0;
                    bright_set.brt=255;
		        }
			}
        }
        if(ch[i].cnt==0 && ch[i].flag==2){//今の瞬間死んだら
            enter_char_item(i);//キャラのアイテム登録(39章)
            ch[i].x=FMX/2;
            ch[i].y=FMY+30;
    		ch[i].life=300;
            ch[i].mutekicnt++;//無敵状態へ
            ch[0].num--;
        }
        if(ch[i].flag==2){//死んで浮上中なら
            unsigned int push=CheckStatePad(configpad[i].left)+CheckStatePad(configpad[i].right)
                +CheckStatePad(configpad[i].up)+CheckStatePad(configpad[i].down);
            ch[i].y-=1.5;//キャラを上に上げる
            //1秒以上か、キャラがある程度上にいて、何かおされたら
            if(ch[i].cnt>60 || (ch[i].y<FMY-20 && push)){
                ch[i].cnt=0;
                ch[i].flag=0;//キャラステータスを元に戻す
            }
        }
        if(ch[i].mutekicnt>0){//無敵カウントが0じゃなければ
            ch[i].mutekicnt++;
            if(ch[i].mutekicnt>150)//150以上たったら
                ch[i].mutekicnt=0;//戻す
        }
        ch[i].cnt++;//キャラクタカウントアップ
        ch[i].img=(ch[i].cnt%24)/6;//現在の画像決定
	}
}

//キャラクタの移動制御
void ch_move(){
    	for(int p=0;p<CHARA_MAX;p++){
            int i,sayu_flag=0,joge_flag=0;
            double x,y,mx,my,naname=1;
            double move_x[4]={-4.0,4.0,0,0},move_y[4]={0,0,4.0,-4.0};//{左,右,下,上}のスピード
            int inputpad[4];
            inputpad[0]=CheckStatePad(configpad[p].left); inputpad[1]=CheckStatePad(configpad[p].right);
            inputpad[2]=CheckStatePad(configpad[p].down); inputpad[3]=CheckStatePad(configpad[p].up);

            if(ch[p].flag==1)return;//喰らいボム受付中は動かせない

            if(CheckStatePad(configpad[p].left)>0)//左キーが押されていたら
                    ch[p].img+=4*2;//画像を左向きに
            else if(CheckStatePad(configpad[p].right)>0)//右キーが押されていたら
                    ch[p].img+=4*1;//画像を右向きに

            for(i=0;i<2;i++)//左右分
                    if(inputpad[i]>0)//左右どちらかの入力があれば
                            sayu_flag=1;//左右入力フラグを立てる
            for(i=2;i<4;i++)//上下分
                    if(inputpad[i]>0)//上下どちらかの入力があれば
                            joge_flag=1;//上下入力フラグを立てる
            if(sayu_flag==1 && joge_flag==1)//左右、上下両方の入力があれば斜めだと言う事
                    naname=sqrt(2.0);//移動スピードを1/ルート2に

            for(int i=0;i<4;i++){//4方向分ループ
                    if(inputpad[i]>0){//i方向のキーボード、パッドどちらかの入力があれば
                            x=ch[p].x , y=ch[p].y;//今の座標をとりあえずx,yに格納
                            mx=move_x[i];   my=move_y[i];//移動分をmx,myに代入
                            if(CheckStatePad(configpad[p].slow)>0){//低速移動なら
                                    mx=move_x[i]/3; my=move_y[i]/3;//移動スピードを1/3に
                            }
                            x+=mx/naname , y+=my/naname;//今の座標と移動分を足す
                            if(!(x<10 || x>FMX-10 || y<5 || y>FMY-5)){//計算結果移動可能範囲内なら
                                    ch[p].x=x , ch[p].y=y;//実際に移動させる
                            }
                    }
            }
	}
}
ゲームをライフ制にしているので、「ch.life」の処理がcalc_ch()に付いています。
CHARA_MAX = 2 で、2機いる自機に処理が出来るようにループさせています。

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

Re: キー入力とパッド入力の拡張

#5

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

とりあえずconfigpad[p]の内容はそれぞれ違うものですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

智寛

Re: キー入力とパッド入力の拡張

#6

投稿記事 by 智寛 » 13年前

>みけCAT様
指摘された所を見直してみましたら、同じ数値が設定されていることに気づきました。
とりあえず上から0、1と順に数を代入してみたら、無事別に動きました。

みけCAT様、h2so5様のおかげで解決出来ました。ありがとうございます。

閉鎖

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