龍神録で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に関してはこれ以外改造はしていません。
しかし、上の状態でコンパイルしてキーボードの←を押すと、両方のキャラが移動してしまいます。
他のショットボタンなども同じ状態です。
何か足りないのでしょうか? どうかご教授お願いします。
キー入力とパッド入力の拡張
Re: キー入力とパッド入力の拡張
char.cppの部分はどのように改造しているのですか?
Re: キー入力とパッド入力の拡張
>みけCAT様
ソースコードを上げたいと思うのですが、やり方がわからなくて上げられません。ごめんなさい。
>h2so5様
ゲームをライフ制にしているので、「ch.life」の処理がcalc_ch()に付いています。
CHARA_MAX = 2 で、2機いる自機に処理が出来るようにループさせています。
ソースコードを上げたいと思うのですが、やり方がわからなくて上げられません。ごめんなさい。
>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;//実際に移動させる
}
}
}
}
}
CHARA_MAX = 2 で、2機いる自機に処理が出来るようにループさせています。
Re: キー入力とパッド入力の拡張
>みけCAT様
指摘された所を見直してみましたら、同じ数値が設定されていることに気づきました。
とりあえず上から0、1と順に数を代入してみたら、無事別に動きました。
みけCAT様、h2so5様のおかげで解決出来ました。ありがとうございます。
指摘された所を見直してみましたら、同じ数値が設定されていることに気づきました。
とりあえず上から0、1と順に数を代入してみたら、無事別に動きました。
みけCAT様、h2so5様のおかげで解決出来ました。ありがとうございます。