按住键盘输入时犹豫?

2023-12-20

有谁知道为什么当您按住键盘按键并尝试处理它时会有些犹豫?我正在 WinProc(...) 中调用一个函数,当按住某个键时,该函数将移动屏幕上的图像(OpenGL)。我按下它并得到一个响应,然后大约有 0.5 秒没有任何反应,然后它表现正常(每个 WinMain 循环移动 1 个像素)。

我想知道 Windows 消息是否由于我需要禁用某些功能而被延迟???

这是我的代码:

int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int nshowcmd)
{
    bool quit = false;
    MSG msg;

    createWindow(hinstance, SCRW, SCRH, SCRD, WINDOWED);

    // Main loop
    while (!quit)
    {       
        if (PeekMessage(&msg, NULL, NULL, NULL, PM_REMOVE))
        {
            if (msg.message == WM_QUIT)
                quit = true;

            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }

        renderFrame();        // processes graphics
        SwapBuffers(hdc);
    }
    return msg.lParam;
}

和 WinProc(还有更多案例,但同样的事情......):

    LRESULT CALLBACK WinProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
    {
        switch(msg)
        {
            case WM_KEYDOWN:
                switch ( wparam )
                {
                    case VK_RIGHT:
                        key_RIGHT();
                        return 0;
                }
                return 0;
}
}

和 key_RIGHT:

void key_RIGHT()
{
    MoveObjectRight1Pixel();
}

这是一个相当标准的键盘设置,在按下按键和生成重复消息之间有一个小的延迟。

您可以保留一个 256 位的数组来指示键盘的当前状态,而不是在 Windows 消息处理程序中处理键盘输入。当您收到WM_KEYDOWN or WM_KEYUP,您更新相应密钥的位。然后,在主循环中,检查键的当前状态和键的先前状态(通过保留第二个 256 位数组,并将其复制到每个帧)。

如果关键点当前已按下但在前一帧中未按下,则您将相应地移动对象。

另一种选择是使用GetAsyncKeyState() http://msdn.microsoft.com/en-us/library/ms646293(VS.85).aspx功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按住键盘输入时犹豫? 的相关文章

随机推荐

  • 尝试对值进行分组?

    我有一些这样的数据 1 2 3 4 5 9 2 6 3 7 我正在寻找这样的输出 组 ID 和该组的成员 1 1 2 6 2 3 4 7 3 5 9 第一行 因为 1 连接 到 2 而 2 连接到 6 第二行 因为 3 连接到 4 3 连接
  • Java使Proxy Socket多线程化

    我已经构建了一个 java 代理 它可以工作 但只允许 1 个客户端 我知道我需要进行多线程处理 这就是我这样做的原因 因此它会打开新线程 但由于某种原因我无法让它工作 这是我的代理类 public class Proxy private
  • 升级到 Xcode 5.0 后,Xcode 无法使用所选设备运行

    我今天升级到了xcode 5 0 然后我按下播放键在 iOS 模拟器中运行我的项目 这最初是有效的 然后我决定运行分析器 当我这样做时 我收到消息 Xcode cannot run using the selected device Cho
  • 列表理解中的函数 - 是否多次评估[重复]

    这个问题在这里已经有答案了 哪一个是在 python 中进行列表理解的更好方法 就计算时间和 CPU 周期而言 在示例 1 中 值 f r 是在每次迭代中计算还是计算一次并缓存 y x f r for x in xlist c f r y
  • AWS 无服务器功能未响应图像

    我正在尝试让 AWS API Gateway 使用图像进行响应 我的无服务器 Lambda 代码如下 const express require express const serverless require serverless htt
  • Python 3 中的 io.StringIO 与 open()

    我能找到的就是这个陈述 https docs python org 3 library io html text i o 创建文本流的最简单方法是使用 open 可选 指定编码 f open myfile txt r encoding ut
  • 模板化运算符重载决策,成员函数与非成员函数

    当尝试 clang 3 4 从 gi t 编译 时 它无法编译我的一个项目 抱怨在解决重载运算符时存在歧义 我发现有两个模板化运算符 其中一个被声明为成员函数 另一个被声明为非成员函数 两者看起来同样匹配 下面SSCCE演示了这种情况 in
  • Horizo​​ntalScroll.Value 不会以编程方式设置

    我有一个带有滚动条的面板 并且我经常想以编程方式将控件滚动到视图中 由于不值得一提的原因 我需要自己的方法 经常当我尝试设置时 MyPanel HorizontalScroll Value newScrollValue 价值根本不会接受 我
  • 将数字字符串编码为缩短的字母数字字符串,然后再编码回来

    快问 我正在尝试在 Python 中查找或编写一个编码器 以通过使用大写和小写字母来缩短数字字符串 数字字符串看起来像这样 2012042516160867825914618150402102259146181504021022012042
  • 将应用程序上下文而不是活动上下文传递给视图

    Why use 活动背景虽然我们可以使用应用上下文加载和访问资源 意味着如果我使用应用上下文代替活动背景没有发生异常所以为什么使用活动背景 Example 在下面的例子中 如果我使用获取应用程序上下文 代替 this 活动内的指针onCre
  • 在命令行上向 PHP Unit 发送参数

    我想使用命令行向 PHP 单元发送参数 e g phpunit foo bar AllTests 我怎样才能做到这一点 我最接近实现目标的是使用以下内容
  • 在 Pyyaml 中,如何以块样式表示空字符串和列表?

    我添加了折叠字符串的代表 文字字符串 如中提到的Python 中是否有支持将长字符串转储为块文字或折叠块的 yaml 库 https stackoverflow com questions 6432605 any yaml librarie
  • Instagram API 无法找到有关私人档案的信息

    我的问题非常类似于this https stackoverflow com questions 23600510 instagram api getting feed of private user whom the authorised
  • 用于插件部署的 Eclipse 最小配置

    我现在正在开发eclipse插件 默认的 eclipse 下载包含很多我的插件不需要的插件 它会导致 eclipse 文件夹的大小大于所需的大小 所以我想知道是否有任何方法可以创建这样最小的 Eclipse 配置 以便它能够加载我的插件并且
  • protobuf-net 是否支持可为 null 的类型?

    是否可以在 protobuf net 中生成可为 null 的成员 message ProtoBuf1 optional Int32 databit 1 optional Nullable
  • 如何更改 Android 上文件选择器标题的外观?

    我想显示一个文件选择器来使用以下代码打开图像 Intent intent new Intent intent setType image intent setAction Intent ACTION GET CONTENT startAct
  • iPhone 中出现“无法在设备上上传 *.app”错误

    我在设备上上传应用程序时遇到错误 它确实安装了它 但无法上传它 我还想在设备上运行仪器工具 但当我运行时它什么也没有显示 任何面临同样问题的人 在更改配置文件和应用程序 ID 后 我遇到了这个问题 是什么为我解决了这个问题 退出 XCode
  • 使用嵌套对象访问 jsonpath 元素

    我希望从数组和对象的 JSON 路径中提取某些值 并使用这些值进行进一步处理 并且正在努力访问这些元素 这是 JSON 响应 od pair 7015400 8727100 buckets bucket C00 original 2 ava
  • Junit 中的远程 PhantomJS 驱动程序

    如何在 junit 中使用远程 phantomjs 驱动器配置 selenium 我一直在尝试寻找这方面的教程 但没有成功 我的目标是使用它在 spring mvc 中对我的单页应用程序进行测试 经过一番尝试和错误后 我得到了以下解决方案
  • 按住键盘输入时犹豫?

    有谁知道为什么当您按住键盘按键并尝试处理它时会有些犹豫 我正在 WinProc 中调用一个函数 当按住某个键时 该函数将移动屏幕上的图像 OpenGL 我按下它并得到一个响应 然后大约有 0 5 秒没有任何反应 然后它表现正常 每个 Win