何度も質問をして申し訳ありません。
DXライブラリの掲示板に投稿する内容ではないかもしれませんが、何か心当たりがあれば回答して頂けないでしょうか。
○経緯
DXライブラリで作成したゲームをSteamで販売しています。
そのゲームでSteamAPIを使って、Steam内でのランキング機能を実装しています。
○現象
SteamAPIの初期化関数SteamAPI_Init()を呼び出すと、GetJoypadInputState等のPADに関する処理が何の値も返さなくなります。
https://partner.steamgames.com/doc/sdk/api?l=japanese
SteamAPI_Initを呼ぶと、それ以降GetJoypadInputState等のPADに関数がすべて0で返ってきます。
後述の検証コードで呼んでいる関数はすべてすべて0で返ってきました。
SteamAPI_Initを呼ばなければ、GetJoypadInputState等のPADに関数は入力通りの値が返ってきます。
補足:
キーボードの入力はSteamAPI_Initの呼び出しに関わらず、正常に値が返ってきます。
char buf[256];
GetHitKeyStateAll(buf);
SteamAPIはSteamでアプリの登録をしないと呼び出せないので、管理人様にお伺いしても解決が難しいと思っています。
ですが、何か原因の心当たりや、アドバイス等ありましたら回答して頂けないでしょうか。
○検証環境
Windows10
C++版 DXLib_Ver3.23
VisualStudio2019
○検証コード
void DXlibQA3() {
SetGraphMode(1280, 720, 32);
ChangeWindowMode(true);
SetAlwaysRunFlag(TRUE);
if (DxLib_Init() == -1) {
return;
}
SetDrawScreen(DX_SCREEN_BACK);
// SteamAPI初期化処理
SteamAPI_Init(); // これをコメントアウトすれば、正常に動作する
DINPUT_JOYSTATE input;
XINPUT_STATE input2;
while (!ProcessMessage()) {
ClearDrawScreen();
if ((GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_UP) == 0)
{
DrawString(100, 10, "押されていない", GetColor(255, 255, 255));
}
else
{
DrawString(100, 10, "押されている", GetColor(255, 255, 255));
}
// パッド1の入力を取得
int InputX, InputY;
char String[64];
GetJoypadAnalogInput(&InputX, &InputY, DX_INPUT_KEY_PAD1);
// 画面に入力状態を表示する
{
ClearDrawScreen();
wsprintf(String, "X = %d", InputX);
DrawString(0, 100, String, GetColor(255, 255, 255));
wsprintf(String, "Y = %d", InputY);
DrawString(0, 116, String, GetColor(255, 255, 255));
}
// 入力状態を取得
GetJoypadDirectInputState(DX_INPUT_PAD1, &input);
// 画面に構造体の中身を描画
int Color = GetColor(255, 255, 255);
DrawFormatString(0, 200, Color, "X:%d Y:%d Z:%d",
input.X, input.Y, input.Z);
DrawFormatString(0, 216, Color, "Rx:%d Ry:%d Rz:%d",
input.Rx, input.Ry, input.Rz);
DrawFormatString(0, 232, Color, "Slider 0:%d 1:%d",
input.Slider[0], input.Slider[1]);
DrawFormatString(0, 248, Color, "POV 0:%d 1:%d 2:%d 3:%d",
input.POV[0], input.POV[1],
input.POV[2], input.POV[3]);
DrawString(0, 264, "Button", Color);
for (int i = 0; i < 32; i++)
{
DrawFormatString(64 + i % 8 * 64, 264 + i / 8 * 16, Color,
"%2d:%d", i, input.Buttons[i]);
}
// 入力状態を取得
GetJoypadXInputState(DX_INPUT_PAD1, &input2);
// 画面に XINPUT_STATE の中身を描画
Color = GetColor(255, 255, 255);
DrawFormatString(0, 500, Color, "LeftTrigger:%d RightTrigger:%d",
input2.LeftTrigger, input2.RightTrigger);
DrawFormatString(0, 516, Color, "ThumbLX:%d ThumbLY:%d",
input2.ThumbLX, input2.ThumbLY);
DrawFormatString(0, 532, Color, "ThumbRX:%d ThumbRY:%d",
input2.ThumbRX, input2.ThumbRY);
DrawString(0, 64, "Button", Color);
for (int i = 0; i < 16; i++)
{
DrawFormatString(64 + i % 8 * 64, 564 + i / 8 * 16, Color,
"%2d:%d", i, input.Buttons[i]);
}
// 毎フレーム呼び出す必要あり
SteamAPI_RunCallbacks();
ScreenFlip();
clsDx();
}
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
srand((unsigned)time(nullptr)); //乱数初期化
DXlibQA3();
return 0;
}