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

Raylib C++ 按下R键生成矩形松开即消失问题求解

Raylib采用每帧清空屏幕后重绘所有内容的渲染逻辑,你当前将绘制逻辑写在IsKeyDown(KEY_R)判断内的写法,只会在按住R键的帧执行绘制,松开按键后对应帧不再执行绘制逻辑,矩形自然就会消失。要实现矩形永久保留的效果,只需要把所有需要绘制的矩形数据提前存储,每帧统一遍历绘制所有存储的内容即可。

具体实现步骤

  1. 首先定义存储矩形数据的结构和全局存储容器,这里用固定长度数组实现,适合初学快速上手:
// 定义最大支持存储的矩形数量,可根据需求调整
#define MAX_RECTANGLES 1024
// 自定义结构体存储矩形的位置、大小、颜色属性
typedef struct {
    Vector2 pos;
    Vector2 size;
    Color color;
} SavedRectangle;

// 全局数组存储所有要保留的矩形
SavedRectangle savedRects[MAX_RECTANGLES] = {0};
// 记录当前已存储的矩形总数
int rectCount = 0;
  1. 修改按键触发逻辑,将「直接绘制」改为「按下时存储数据」,这里建议用IsKeyPressed替代IsKeyDown,避免按住按键时重复添加多个矩形:
// 这部分逻辑写在帧更新逻辑中,不要嵌套在绘制代码里
if (IsKeyPressed(KEY_R) && rectCount < MAX_RECTANGLES) {
    savedRects[rectCount] = (SavedRectangle){
        .pos = SpawnRecPos,
        .size = RecSize,
        .color = RecClr
    };
    rectCount++;
}
  1. 最后在每帧的绘制阶段,遍历所有已存储的矩形统一绘制,不需要判断按键状态:
BeginDrawing();
    ClearBackground(RAYWHITE);
    // 遍历所有已保存的矩形逐个绘制
    for (int i = 0; i < rectCount; i++) {
        DrawRectangleV(savedRects[i].pos, savedRects[i].size, savedRects[i].color);
    }
    // 其他绘制逻辑写在这里
EndDrawing();

额外提示

如果需要实现清空画布、撤销上一步的操作,只需要修改存储的数组和计数即可:比如清空画布直接将rectCount设为0,撤销上一步直接将rectCount减1即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:45:03