gpt4 book ai didi

c++ - XInput 360 Controller 不适用于 cocos2d-x

转载 作者:行者123 更新时间:2023-11-28 07:28:03 26 4
gpt4 key购买 nike

大家好,
我是 c++ 的新手,我一直在努力让它工作的时间比我承认的要长。所以我放弃了以下引用并让 Controller 在控制台应用程序中工作。

这是结果 xbox360Controller.h xbox360Controller.cpp

从那里我试图让它与 cocos2d-x 一起使用 steve tranby's post at the bottom of this thread (他添加到)并将其适应 360 游戏 handle 。

当我让键盘事件起作用时(这是标准的 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;

}

我不知道将 Controller 逻辑放在哪里。 我试过了在 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);
}
}

完整代码是here源代码在 github Here .任何人都知道放置 XboxController 实例以使其正确响应 KeypadDown 的正确位置吗?

最佳答案

首先,WindowProc 是一个回调函数,在 Windows 向窗口发送消息后调用。

因此,如果没有消息,则不会调用此函数。

XInput api 不是基于消息的 api,它不生成消息。它要求应用程序尽可能频繁地读取其状态。通常它会在每个游戏循环中读取,就在处理游戏逻辑之前。或者,您可以有一个单独的线程每 33 毫秒左右轮询一次状态。

我建议您看一下 XInput 的工作原理、Windows 编程的概念以及游戏引擎架构的基本概念。

关于c++ - XInput 360 Controller 不适用于 cocos2d-x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18346943/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com