2016-07-11 96 views
0

我的問題是,在KeyDown上,幾乎有一秒的延遲,直到所有事件隊列開始處理,請參閱video demo here。其次,並行鍵不處理,我可以去W,S或其他,但不能同時。KeyDown延遲C++ UWP Windows 10 Direct3D 12應用程序

我已經嘗試運行的渲染()異步和使用ProcessUntiLQuit,改變我讀輸入的方式,等等......我目前的經典Run(while not closed)循環

使用ProcessAllIfPresent在我的IFrameworkView實例應用程序

,以下是我的KeyDown處理程序:

void OnKeyDown(CoreWindow^ wnd, KeyEventArgs^ args) { 
    for(int i = 0; i < g_MainApplication->InputMap().size(); ++i) { 
     if(g_MainApplication->InputMap()[i] == args->VirtualKey) { 
      g_MainApplication->FlagInput((Application::INPUT_MAP)i); 
     } 
    } 
} 

總共只有K個映射鍵,因此它運行時間不變。這將設置所有的標誌,並將其傳遞給應用程序,它簡單地直接調用「UpdatePosition」方法修改值:

void MyApp::ProcessKeyboard(INPUT_MAP key, double delta) { 
    delta *= g_SpeedModifier; 
    switch(key) { 
    case FORWARD: 
     g_SelectedEntity->Translate(DIRECTION::WORLD_FORWARD, static_cast<float>(delta)); 
     break; 
... // more of the same code here. 
} 

該應用程序呈現在60 FPS。

感謝您的幫助。

回答

0

我只是想

CoreWindow::GetForCurrentThread()->GetAsyncKeyState(VirtualKey) 

...連續循環。它效果很好。

+0

如果你想基本上把鍵盤當作'控制器',你可能需要查看[DirectX]中的[Keyboard](https://github.com/Microsoft/DirectXTK/wiki/Keyboard)類。工具包](https://github.com/Microsoft/DirectXTK12/)。 –

相關問題