正常にビルドされた後、
自機移動の左(←)キーで、Zキーの自機ショットが始まってしまいます。
スロー(低速移動)モードに移行する左シフトキーは有効ですが、Zキーのみ無効です。
現在、左に移動しながらでないとショットが出来ない状況にあります。
ソースはコピペに頼らないで書いています。
キーコンフィグの設定どこかおかしいでしょうか。
key.cppファイルの内容です、少し長いですが失礼します。
#include "../include/GV.h" unsigned int stateKey[256]; int GetHitKeyStateAll_2(){ char GetHitKeyStateAll_Key[256]; GetHitKeyStateAll( GetHitKeyStateAll_Key ); for(int i=0;i<256;i++){ if(GetHitKeyStateAll_Key==1) stateKey++; else stateKey=0; } return 0; } int CheckStateKey(unsigned char Handle){ return stateKey[Handle]; } //パッドの入力状態を格納する変数 pad_t pad; //引数1と引数2のうち大きいほうを引数1に代入する void input_pad_or_key(int*p, int k){ *p = *p>k ? *p : k; } //パッドとキーボードの両方の入力のチェックをする関数 void GetHitPadStateAll(){ int i,PadInput,mul=1; PadInput = GetJoypadInputState( DX_INPUT_PAD1 );//パッドの入力状態を取得 for(i=0;i<16;i++){ if(PadInput & mul) pad.key++; else pad.key=0; mul*=2; } input_pad_or_key(&pad.key[configpad.left] ,CheckStateKey(KEY_INPUT_LEFT )); input_pad_or_key(&pad.key[configpad.up] ,CheckStateKey(KEY_INPUT_UP )); input_pad_or_key(&pad.key[configpad.right] ,CheckStateKey(KEY_INPUT_RIGHT )); input_pad_or_key(&pad.key[configpad.down] ,CheckStateKey(KEY_INPUT_DOWN )); input_pad_or_key(&pad.key[configpad.shot] ,CheckStateKey(KEY_INPUT_Z )); input_pad_or_key(&pad.key[configpad.bom] ,CheckStateKey(KEY_INPUT_X )); input_pad_or_key(&pad.key[configpad.slow] ,CheckStateKey(KEY_INPUT_LSHIFT )); input_pad_or_key(&pad.key[configpad.start] ,CheckStateKey(KEY_INPUT_ESCAPE )); input_pad_or_key(&pad.key[configpad.change],CheckStateKey(KEY_INPUT_LCONTROL)); } //渡されたパッドキー番号の入力状態を返す。返り値が-1なら不正 int CheckStatePad(unsigned int Handle){ if(0<=Handle && Handle<PAD_MAX){ return pad.key[Handle]; } else{ printfDx("CheckStatePadに渡した値が不正です\n"); return -1; } }
cshot.cpp内の自機ショット登録関数はこちらです。
#include "../include/GV.h" int cshot0num[2] ={2,4}; int cshot0pos_x[4] ={-10, 10,-30, 30}; int cshot0pos_y[4] ={-30,-30,-10,-10}; //自機ショットの登録可能番号を返す int search_cshot(){ for(int i=0;i<CSHOT_MAX;i++){ if(cshot.flag==0) return i; } return -1; } //通常ショット登録 void ch0_shot_pattern(){ int k; for(int i=0;i<cshot0num[ch.power?0:1];i++){ if((k=search_cshot())!=-1){ cshot[k].flag=1; cshot[k].cnt=0; cshot[k].angle=-PI/2; cshot[k].spd=20; cshot[k].x=ch.x+cshot0pos_x; cshot[k].y=ch.y+cshot0pos_y; cshot[k].power=23; cshot[k].knd=0; } } se_flag[2]=1;//発射音オン } //低速通常ショット登録 void ch1_shot_pattern(){ int k; for(int i=0;i<cshot0num[ch.power<200?0:1];i++){ if((k=search_cshot())!=-1){ cshot[k].flag=1; cshot[k].cnt=0; cshot[k].angle=-PI/2; cshot[k].spd=20; cshot[k].x=ch.x+cshot0pos_x/3;//低速中なら位置を中心側へ cshot[k].y=ch.y+cshot0pos_y/2; cshot[k].power=23; cshot[k].knd=0; } } se_flag[2]=1; } //ショット登録部 void enter_shot(){ //ショットボタンが押されていたら if(CheckStatePad(configpad.shot>0)){ ch.shot_cnt++; if(ch.shot_cnt%3==0){//3カウントに1回 if(CheckStatePad(configpad.slow)>0)//低速移動中なら ch1_shot_pattern(); else ch0_shot_pattern(); } } else ch.shot_cnt=0; } //ショットの移動計算 #define CSOUT 20 //どのくらい画面から外れたら消すか void calc_cshot(){ for(int i=0;i<CSHOT_MAX;i++){ if(cshot[i].flag==1){ cshot[i].x+=cos(cshot[i].angle)*cshot[i].spd; cshot[i].y+=sin(cshot[i].angle)*cshot[i].spd; if(cshot[i].x<-CSOUT || cshot[i].x>FIELD_MAX_X+CSOUT || cshot[i].y<-CSOUT || cshot[i].y>FIELD_MAX_Y+CSOUT)//画面から外れたら cshot[i].flag=0; } } } //自機ショットに関する関数 void cshot_main(){ calc_cshot();//ショットの軌道計算 enter_shot();//ショットの登録 }
ゲームパッドでも同じ状況です、
どのような原因が考えられるでしょうか。
また、館でまとめてダウンロードできるプロジェクトの17章では正常にショットが撃てます。