You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过键盘按键在鼠标坐标处绘制指定纹理?

问题分析与解决

你的代码核心问题是在键盘事件中错误使用了鼠标事件专属字段:
处理SDL_KEYDOWN事件时,e.motion.x和e.motion.y是无效值——motion成员仅在SDL_MOUSEMOTION、SDL_MOUSEBUTTONDOWN这类鼠标事件中有效,键盘事件的结构体不会给这个字段赋值,你拿到的是随机垃圾坐标,自然无法把纹理绘制到鼠标位置。

修复代码

将SDLK_1的处理分支替换为以下代码,用SDL_GetMouseState直接获取当前鼠标的实时坐标:

case SDLK_1:
{
    int mouseX, mouseY;
    // 获取当前鼠标在窗口中的坐标
    SDL_GetMouseState(&mouseX, &mouseY);
    SDL_Rect rect = {mouseX - 8, mouseY - 8, 16, 16};
    // 确保纹理加载成功再执行绘制
    if (gT[3] != NULL) {
        SDL_RenderCopy(gRenderer, gT[3], NULL, &rect);
    }
    printf("1\n");
    break;
}

额外注意事项

  • 确认主循环末尾调用了SDL_RenderPresent(gRenderer),这一步是把渲染缓冲区的内容刷新到窗口,没有它的话所有绘制操作都不会显示。
  • 检查gT[3]的加载逻辑,确保纹理初始化成功(可在加载后打印gT[3]地址,非NULL即为正常)。

内容的提问来源于stack exchange,提问作者yesyes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 02:25:45