0

だから私は自分のプログラムで xinput を使用しています。すべてセットアップされて動作しているので、xbox one コントローラーを検出できます。コントローラーのボタンが押されたことを検出できるようにしたい。プログラムの起動時にボタンを押したままにすると、私が使用する手順が機能します。しばらくの間 if コマンドをセットアップしているので、コントローラーで A を押しても何らかの理由で値が変化しませんが、常に実行されます。

したがって、基本的に、プログラムが開いているときに A を押したままにすると、機能して画面に cout が返されます。プログラムの開始後に少し押したい場合(これが私がやりたいことです)、それを検出しません。

これが私のコードです:

using namespace std;
XINPUT_STATE state;

bool A_button_pressed;
int online;
int test;

int main() {
    if (XInputGetState(0, &state) == ERROR_SUCCESS)
    {
        online = 1;
        cout << "I could find a controller, it is an Xbox Controller" << endl;
    } else {
        online = 2;
        cout << "Unable to find controller, searching..." << endl;
    }
    cout << A_button_pressed << endl;
        cout << "Active" << endl;
        while (online == 1) {
            bool A_button_pressed = ((state.Gamepad.wButtons & XINPUT_GAMEPAD_A) != 0);
            cout << A_button_pressed << endl;
            if (A_button_pressed = ((state.Gamepad.wButtons & XINPUT_GAMEPAD_A) != 0)) {
                cout << "You pressed a button, congrats, game over..." << endl;
            }
        };
}

私の知る限り、正しいライブラリをすべて正しい順序で含めています。

#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <Xinput.h>
#pragma comment(lib, "Xinput.lib")
#pragma comment(lib, "Xinput9_1_0.lib")
4

1 に答える 1

1

問題は、起動時に XInputGetState を 1 回しか呼び出していないことです。状態情報を更新できるように、プログラムが実行するすべてのフレームで XInputGetState を呼び出す必要があります。

于 2017-01-07T00:01:25.400 に答える