XInput 360控制器无法与cocos2d-x一起工作
XInput 360 controller not working with cocos2d-x
Ello All,
我对c++还很陌生,我试图让它发挥作用的时间比我愿意承认的要长。所以我离开了下面的参考,让控制器在控制台应用程序中工作。
- xbox360控制器输入,c使用x输入
- 代码项目项目
- MSDN
结果如下xbox360控制器.hxbox360控制器.cpp
从那里开始,我试图使用史蒂夫·特兰比在本线程底部的帖子(他添加到中)将其与cocos2d-x一起使用,并将其应用于360游戏板。
当我让键盘事件开始工作时(这是标准的windows输入,所以还不错)
LRESULT CCEGLView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
BOOL bProcessed = FALSE;
CCLog("Message sent = %d",message);
//note* only showing relavant sections of code for brevity
switch (message)
{
case WM_KEYDOWN:
if (wParam == VK_F1 || wParam == VK_F2)
{
CCDirector* pDirector = CCDirector::sharedDirector();
if (GetKeyState(VK_LSHIFT) getKeypadDispatcher()->dispatchKeypadMSG(wParam == VK_F1 ? kTypeBackClicked : kTypeMenuClicked);
}
}
else if (wParam == VK_ESCAPE)
{
CCDirector::sharedDirector()->getKeypadDispatcher()->dispatchKeypadMSG(kTypeBackClicked);
}
else
{
CCDirector::sharedDirector()->getKeypadDispatcher()->dispatchKeypadDown(wParam);
}
if ( m_lpfnAccelerometerKeyHook!=NULL )
{
(*m_lpfnAccelerometerKeyHook)( message,wParam,lParam );
}
break;
default:
if (m_wndproc)
{
m_wndproc(message, wParam, lParam, &bProcessed);
if (bProcessed) break;
}
return DefWindowProc(m_hWnd, message, wParam, lParam);
}
if (m_wndproc && !bProcessed)
{
m_wndproc(message, wParam, lParam, &bProcessed);
}
return 0;
}
我不知道该把控制器的逻辑放在哪里我试过了在WindowProc方法中,并意识到它不起作用作为WindowProc事件的回调触发(我可能没有正确的语言,对不起)我得到的最接近于经常发生火灾的东西是
static LRESULT CALLBACK _WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
CCDirector* pDirector = CCDirector::sharedDirector();
XboxController* player1 = new XboxController(GamePadIndex_One);
if(player1->IsConnected())
{
player1->Update();
for(int i =0;iState._buttons[i]==true)
{
//CCApplication::sharedApplication()->getKe
pDirector->getKeypadDispatcher()->dispatchKeypadDown(i);
}
}
}
delete player1;
if (s_pMainWindow && s_pMainWindow->getHWnd() == hWnd)
{
return s_pMainWindow->WindowProc(uMsg, wParam, lParam);
}
else
{
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
}
完整的代码在这里来源在github这里。有人知道放置XboxController实例的正确位置,以便它正确响应KeypadDown
吗?
首先,WindowProc是一个回调函数,在从Windows向窗口发送消息后调用它。
所以,如果没有消息,这个函数就不会被调用。
XInput api不是基于消息的api,它不生成消息。它要求应用程序尽可能频繁地读取其状态。通常,它在每个游戏循环中读取,就在处理游戏逻辑之前。或者,您可以有一个单独的线程,每隔33ms左右轮询一次状态
我建议你看看XInput是如何工作的,Windows编程的概念,以及游戏引擎架构的基本概念。
相关文章:
- 如何将enable-if与模板参数和参数包一起使用
- 如何将PERF_AMPLE_READ与mmap一起使用
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将C++中的库和头与MinGW一起使用
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 为什么我不能将 rand() 与数组的大小一起使用?
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 不能将复制初始化与隐式转换的多个步骤一起使用
- 将fold表达式与std::一起用于两个元组
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 将 std::allocate_shared 与多态资源分配器一起使用
- 为什么常量词在重载运算符中不与 ostream 对象一起使用<<?
- 将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
- 将 exprtk 与自定义类的对象一起使用
- 将 std::set 与基于键的比较器一起使用
- 将 C++ 类与 Rcpp 一起使用,从 C 或 R 修改它
- 如何将 Eigen::Ref 与 pybind11 一起使用?
- 如何将AERT_Allocate与 std:vector 一起使用
- 如何使我的 sizeof sum 结构与空参数包一起工作
- XInput 360控制器无法与cocos2d-x一起工作