正常にビルドされた後、
自機移動の左(←)キーで、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章では正常にショットが撃てます。