问题描述
我仅使用SDL的Input部分,创建自己的Win32窗口,然后从中创建一个SDL窗口。我在使用SDL_GameController接口时遇到了一些问题。由于某种原因,当我的游戏启动时,游戏控制器无法正常工作。发送了SDL_CONTROLLERDEVICEADDED,但此后没有发送任何控制器/操纵杆事件,并且尝试读取控制器的状态始终返回零。
但是,如果我从窗口中单击然后重新进入,则控制器可以工作,并且我无法弄清楚原因。其他输入(键盘/鼠标)似乎工作正常。
相关代码:
Win32窗口创建:
// Removing some irrelevant code
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC | CS_ENABLE;
wcex.lpszClassName = _T("WndClass");
RegisterClassEx(&wcex);
/// ....
HWND hWnd = CreateWindowW(L"WndClass",L"Window",WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU,x,y,rect.right - rect.left,rect.bottom - rect.top,NULL,hInstance,NULL);
ShowWindow(hWnd,nCmdshow);
UpdateWindow(hWnd);
SDL初始化
SDL_Init(SDL_INIT_VIDEO | SDL_INIT_GAMECONTROLLER);
_sdlWindow = SDL_CreateWindowFrom((void*)winInfo->hWnd);
SDL帧
while (SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_CONTROLLERDEVICEREMOVED:
if (_sdlGameController != nullptr)
{
SDL_GameController* deadController = SDL_GameControllerFromInstanceID(event.jdevice.which);
if (deadController == _sdlGameController)
{
SDL_GameControllerClose(_sdlGameController);
_sdlGameController = nullptr;
}
}
break;
case SDL_CONTROLLERDEVICEADDED:
if (_sdlGameController == nullptr)
{
_sdlGameController = SDL_GameControllerOpen(event.jdevice.which);
SDL_GameControllerEventState(SDL_ENABLE);
}
break;
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)