「左右移動をするときは自機の画像を左右移動用に差し替える」ようにプログラムを組んだのですが、それを実際に動かすと自機がキーに合わせて動いてくれません。ただ左右に動かすだけならキーに合わせて動きます。これをちゃんとキーに合わせて画像を差し替えつつ動くようにすればどうすればいいでしょうか?ご指導のほどよろしくお願いします。
char.cpp
#include "../ヘッダー/GV.h"
void calc_ch(){//画像ループ用関数
ch.cnt++;
ch.img=(ch.cnt%48)/12;
}
void calc_move(){
if(CheckStatePad(configpad.left)>0)//左に押されていたら
ch.cnt+=8;//←‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐この行を追加すると自機が動かなくなる
ch.x-=2;//座標を左に
if(CheckStatePad(configpad.right)>0)//右に押されていたら
ch.cnt+=4;//←‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐この行を追加すると自機が動かなくなる
ch.x+=2;//座標を右に
}
#include "../ヘッダー/GV.h"
void graph_ch(){
DrawRotaGraph(ch.x,444,1.0,0.0,img[ch.cnt%48/12],TRUE);
}//graph_ch()の中にimgの0番(自機の上向き画像)の作画作業を入れる
void graph_board(){
DrawGraph(0,0,img_board10,TRUE);
}
void graph_main(){//描画メイン
graph_ch();
graph_board();
}//graph_main()の中にgraph_ch()を入れる
#include "../ヘッダー/GV.h"
//初期化関数
void first_ini(){//初期化
ch.x=FIELD_MAX_X/2;//初期の自機座標の設定
configpad.left=1;
configpad.right=2;
configpad.shot=0;
configpad.bom=4;
configpad.start=7;
}
#include "../ヘッダー/GV.h"
unsigned int stateKey[256];
int GetHitKeyStateAll_2(){//ここからGetHitKeyStateAll_2()関数(現在のキー入力処理を行う)
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key[i]==1) stateKey[i]++;
else stateKey[i]=0;
}
return 0;
}//ここまでGetHitKeyStateAll_2()関数(受け取ったキー番号の現在のキー入力状態を返す)
int CheckStateKey(unsigned char Handle){//ここからCheckStateKey(unsigned char Handle)関数(受け取ったキー番号の現在の入力状態を返す)
return stateKey[Handle];
}//ここまでCheckStateKey(unsigned char Handle)関数
//パッドの入力状態を入れる変数(struct.h参照)
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[i]++;
else pad.key[i]=0;
mul*=2;
}
input_pad_or_key(&pad.key[configpad.left] ,CheckStateKey(KEY_INPUT_LEFT));
input_pad_or_key(&pad.key[configpad.right] ,CheckStateKey(KEY_INPUT_RIGHT));
input_pad_or_key(&pad.key[configpad.shot] ,CheckStateKey(KEY_INPUT_A));
input_pad_or_key(&pad.key[configpad.bom] ,CheckStateKey(KEY_INPUT_S));
input_pad_or_key(&pad.key[configpad.start] ,CheckStateKey(KEY_INPUT_X));
}
//渡されたパッドキーの入力状態を返す。返り値が-1なら不正
int CheckStatePad(unsigned int Handle){
if(0<=Handle && Handle<PAD_MAX){
return pad.key[Handle];
}
else{
printfDx("CheckStatePadに渡した値が不正です\n");
return -1;
}
}
#include "../ヘッダー/GV.h"
void load(){//データをロードする
img_board10 = LoadGraph("画像/システム/枠.png");
img_back10 = LoadGraph("画像/背景/神社周辺.png");
LoadDivGraph("画像/キャラグラ/自機.png",12,4,3,38,41,img);
}
#define GLOBAL_INSTANCE
#include "../ヘッダー/GV.h"
//ループで必ず行う3大処理
int ProcessLoop(){
if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す
if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す
GetHitKeyStateAll_2();//現在のキー入力処理を行う
GetHitPadStateAll();//現在のパッド入力処理を行う
return 0;
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
while(ProcessLoop()==0){//ProcessLoopの内容を行う
switch(func_state){
case 0://func_stateが0の時
load();//function.hの関数load()を実行する
first_ini();//function.hの関数first_ini()を実行する
func_state = 100;//func_stateを100にする
break;
case 100:
graph_main();//function.hの関数graph_main()を実行する
calc_ch();//function.hの関数calc_ch()を実行する
break;
default://上記のcase以外の場合
printfDx("不明なfunc_state%d\n",func_state);
break;
}
if(CheckStateKey(KEY_INPUT_ESCAPE)==1)break;//エスケープが入力されたらブレイク
//ココ!!
ScreenFlip();
}
DxLib_End();
return 0;
}
//graph.cpp
GLOBAL void graph_main();//描画メイン
//key.cpp
GLOBAL int GetHitKeyStateAll_2();//現在のキー入力を行う
GLOBAL int CheckStateKey(unsigned char Handle);//受け取ったキー番号の現在の入力状態を返す
//load.cpp
GLOBAL void load();//データをロードする
//ini.ccp
GLOBAL void first_ini();//初期化する
//char.cpp
GLOBAL void calc_ch();//画像のループさせる為の準備
//key.cpp
GLOBAL void GetHitPadStateAll();
GLOBAL int CheckStatePad(unsigned int Handle);
#include "DxLib.h"
#include "define.h"
#ifdef GLOBAL_INSTANCE
#define GLOBAL
#else
#define GLOBAL extern
#endif
#include"function.h"//関数宣言(function.hの読み込み)
//画像用変数宣言部分
GLOBAL int img[12];//自機画像
GLOBAL int img_board10;//枠画像
GLOBAL int img_back10;//一面背景
//構造体変数宣言部分
GLOBAL ch_t ch;
//メインループ用変数宣言部分
GLOBAL int func_state;
//コントローラー用構造体変数宣言部分
GLOBAL configpad_t configpad;