始めまして、オーシロと申します。
入力関連の処理で楽をしてみようと、
必要なボタンの構造体を配列で用意して、
for文で1つずつ入力されているかどうかをチェックする処理を考えました。
それで私が書いたのが以下のようなソースです。
#include <DxLib.h>
//ボタンの数
#define BUTTON_NUM 8
//各ボタン
#define KEY_UP 0
#define KEY_DOWN 1
#define KEY_LEFT 2
#define KEY_RIGHT 3
#define KEY_BUTTON1 4
#define KEY_BUTTON2 5
#define KEY_BUTTON3 6
#define KEY_BUTTON4 7
//ボタンの構造体
typedef struct{
int Handle; //ボタンのビット
int Time; //ボタンが入力された時間
} button_data;
//入力の構造体
typedef struct{
int PadInput; //入力媒体のビット
button_data Button[BUTTON_NUM]; //ボタンの数だけボタンの構造体
} input_data;
//グローバル宣言
input_data Input;
//入力の構造体の初期化
void InputInit(){
//入力媒体のビットを入れる
Input.PadInput = GetJoypadInputState(DX_INPUT_KEY_PAD1);
//各ボタンのビットを入れる。後々にコンフィグで変更できるようにしたい
Input.Button[KEY_UP].Handle = PAD_INPUT_UP;
Input.Button[KEY_DOWN].Handle = PAD_INPUT_DOWN;
Input.Button[KEY_LEFT].Handle = PAD_INPUT_LEFT;
Input.Button[KEY_RIGHT].Handle = PAD_INPUT_RIGHT;
Input.Button[KEY_BUTTON1].Handle = PAD_INPUT_A;
Input.Button[KEY_BUTTON2].Handle = PAD_INPUT_B;
Input.Button[KEY_BUTTON3].Handle = PAD_INPUT_X;
Input.Button[KEY_BUTTON4].Handle = PAD_INPUT_Y;
//それぞれの入力時間は最初はゼロ
for(int i=0;i<BUTTON_NUM;i++){
Input.Button.Time = 0;
}
}
//入力されているかをチェックする関数
void InputCheck(){
for(int i=0;i<BUTTON_NUM;i++){
//各ボタンの入力状況をチェック
if(Input.PadInput & Input.Button.Handle){
//入力されていたらカウント
Input.Button.Time++;
}
else{
//入力されていなかったら0に戻す
Input.Button.Time = 0;
}
}
}
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){
ChangeWindowMode(TRUE);
if(DxLib_Init() == -1) return -1;
SetDrawScreen(DX_SCREEN_BACK);
InputInit();
while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){
ClearDrawScreen();
InputCheck();
for(int i=0;i<BUTTON_NUM;i++){
DrawFormatString(0, 0 + i * 20, GetColor(255, 255, 255), "%3dは押されてから%5d回カウントされました", Input.Button.Handle, Input.Button.Time);
}
ScreenFlip();
}
DxLib_End();
return 0;
}
これをコンパイルして実行してみたところ、なぜかボタンを押してもカウントされませんでした。
どこが駄目なのでしょうか?
OSはWindowsXP Professional SP3で、開発環境はMicrosoft Visual C++ 2008です。
Cに関する知識は基礎はある程度できるほうだと思います。
入力の処理でつまづいています
Re:入力の処理でつまづいています
> >どこが駄目なのでしょうか?
> パッドの押下情報……Input.PadInputを毎フレーム更新して下さい。
あっ…。
なんて情けないケアレスミス。すみません、ありがとうございました。
> パッドの押下情報……Input.PadInputを毎フレーム更新して下さい。
あっ…。
なんて情けないケアレスミス。すみません、ありがとうございました。