入力の処理でつまづいています

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
オーシロ

入力の処理でつまづいています

#1

投稿記事 by オーシロ » 15年前

始めまして、オーシロと申します。

入力関連の処理で楽をしてみようと、
必要なボタンの構造体を配列で用意して、
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に関する知識は基礎はある程度できるほうだと思います。

Justy

Re:入力の処理でつまづいています

#2

投稿記事 by Justy » 15年前

>どこが駄目なのでしょうか?
 パッドの押下情報……Input.PadInputを毎フレーム更新して下さい。

オーシロ

Re:入力の処理でつまづいています

#3

投稿記事 by オーシロ » 15年前

> >どこが駄目なのでしょうか?
>  パッドの押下情報……Input.PadInputを毎フレーム更新して下さい。

あっ…。
なんて情けないケアレスミス。すみません、ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る