こんにちは、
私は C++ にかなり慣れていないので、認めようと思っているよりも長い間、これを機能させようとしてきました。そのため、次の参照から離れて、コントローラーをコンソール アプリで動作させるようにしました。
これが結果 です xbox360Controller.h xbox360Controller.cpp
そこから、このスレッドの下部にある steve tranby の投稿(彼は に追加) を使用して 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 Hereにあります。適切に応答するために、XboxController インスタンスを配置する適切な場所を知っている人はいKeypadDown
ますか?