トップページ > 記事閲覧
xinputとxaudio2の自作
名前:xmin 日時: 2018/11/14 12:37

初めまして、いつもお世話になっております。 質問なのですが Xaudio2とXinputを自作して、それをDXライブラリで組んだゲームに組みたいと思っています。 それでXinputを組み込んだ際にXINPUT_STATE等の再定義とうるさく言われて実行できませんでした。 なのでifndefと名前空間で無理矢理やって何とか出来ている状態なのですが何かDXライブラリの方の定義をなくす方法などありますでしょうか? また、DXライブラリの公式ページにある改造変更の方でどうにかする方法しかありませんでしょうか?
メンテ

Page: 1 |

Re: xinputとxaudio2の自作 ( No.1 )
名前:BIN250 日時:2018/11/14 22:59

DxLibのライブラリを改造してもアップデートのたびに作り直す必要があって面倒なので XInput.hをプログラム側(WinMain)で使わなくていいように、XInput処理はDLLを作ってそっちで 処理させるのがいいのではないでしょうか。 MyXInput.h (DLL) ----------------------------------------------------------------- #pragma once #ifdef MYXINPUT_EXPORTS #define MYXINPUT_API __declspec(dllexport) #else #define MYXINPUT_API __declspec(dllimport) #endif namespace MyXInput { class myXInput { public: MYXINPUT_API BOOL GetStatus(int nPadNum, LPBYTE pData); }; } MyXInput.cpp (DLL) ----------------------------------------------------------------- #include "stdafx.h" #include "MyXInput.h" #include "XInput.h" #pragma comment (lib, "Xinput.lib") typedef struct DXLIB_tagXINPUT_STATE { unsigned char Buttons[16]; unsigned char LeftTrigger; unsigned char RightTrigger; short ThumbLX; short ThumbLY; short ThumbRX; short ThumbRY; } DXLIB_XINPUT_STATE; namespace MyXInput { BOOL myXInput::GetStatus(int nPadNum, LPBYTE pData) { DXLIB_XINPUT_STATE *p = (DXLIB_XINPUT_STATE *)pData; ZeroMemory(p, sizeof(DXLIB_XINPUT_STATE)); XINPUT_STATE state; DWORD dwResult; ZeroMemory(&state, sizeof(XINPUT_STATE)); dwResult = XInputGetState(nPadNum, &state); if (dwResult == ERROR_SUCCESS) { // Aボタンの判定のみ p->Buttons[0] = (state.Gamepad.wButtons & XINPUT_GAMEPAD_A) ? 1 : 0; return TRUE; } return FALSE; } } Main.cpp パッド0のAボタンを押したかどうかだけの判定 ----------------------------------------------------------------- #include "DxLib.h" #include "フォルダ/MyXInput.h" #pragma comment (lib, "フォルダ/MyXInput.lib") using namespace MyXInput; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK); SetAlwaysRunFlag(TRUE); myXInput *xi = new myXInput(); DxLib::XINPUT_STATE state; while (ProcessMessage() != -1) { ClearDrawScreen(); xi->GetStatus(0, (LPBYTE)&state); DrawFormatString(0, 0, GetColor(255, 255, 255), TEXT("Btn0=%d"), state.Buttons[0]); ScreenFlip(); } delete(xi); DxLib_End(); return 0; } ※dllmain.cppなどは省略しています。
メンテ
Re: xinputとxaudio2の自作 ( No.2 )
名前:xmin 日時:2018/11/15 15:30

遅くなって申し訳ありません。 DLLを作成するのは初めてだったので戸惑いましたがBIN250さんのおっしゃったようにやってみたところ 動いてほしいように行きました。 ありがとうございます。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存