KeyDown 延迟 C++ UWP Windows 10 Direct3D 12 应用程序
KeyDown latency C++ UWP Windows 10 Direct3D 12 Application
我的问题是,在 KeyDown 上,几乎有一秒钟的延迟,直到开始处理所有事件队列,请参阅 video demo here。其次,不处理平行键,我可以选择 W、S 或其他,但不能同时使用。
我已经尝试过 运行 Render() async 和使用 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 的速度呈现。
感谢您的帮助。
我刚试过
CoreWindow::GetForCurrentThread()->GetAsyncKeyState(VirtualKey)
...连续循环。效果很好。
我的问题是,在 KeyDown 上,几乎有一秒钟的延迟,直到开始处理所有事件队列,请参阅 video demo here。其次,不处理平行键,我可以选择 W、S 或其他,但不能同时使用。
我已经尝试过 运行 Render() async 和使用 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 的速度呈现。
感谢您的帮助。
我刚试过
CoreWindow::GetForCurrentThread()->GetAsyncKeyState(VirtualKey)
...连续循环。效果很好。