我的问题是,在 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 的速度呈现。
谢谢你的帮助。