0

我的问题是,在 KeyDown 上,几乎有一秒钟的延迟,直到所有事件队列开始被处理,请参阅此处的视频演示。其次,没有处理并行键,我可以去 W、S 或其他一些,但不能同时使用两者。

我已经尝试过运行 Render() async 和 using ProcessUntiLQuit,改变我读取输入的方式,等等......

我目前正在使用ProcessAllIfPresent经典Run(while not closed)循环

在我的 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 的速度呈现。

谢谢你的帮助。

4

1 回答 1

0

我刚试过

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

...在一个连续的循环中。它工作得很好。

于 2016-07-11T21:02:08.820 回答