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

使用ggez绘制Rectangle无法显示在画布上的技术问题

解决ggez绘制黑色矩形不显示的问题

针对你遇到的矩形无法显示、仅看到白色画布的问题,结合代码分析,可从以下几个方向排查并修复:

1. 先验证基础渲染是否正常

临时修改代码,绘制一个固定位置的大矩形,确认渲染流程没问题:

fn draw(&mut self, ctx: &mut ggez::Context) -> GameResult {
    let mut canvas = graphics::Canvas::from_frame(ctx, Color::WHITE);
    // 绘制一个位于(50,50)、尺寸100x100的黑色矩形
    let rect = Mesh::new_rectangle(
        ctx,
        DrawMode::fill(),
        Rect::new(50.0, 50.0, 100.0, 100.0),
        Color::BLACK,
    )?;
    canvas.draw(&rect, DrawParam::default());
    canvas.finish(ctx)?;
    Ok(())
}

如果这个矩形能显示,说明你的循环逻辑或坐标计算有问题;如果还是不显示,再检查窗口配置或ggez初始化是否正确。

2. 排查坐标与可视范围

  • 检查CELL_SIZE是否过小:如果CELL_SIZE的值比如是1.0x1.0,矩形会小到几乎看不见,可临时调大数值测试。
  • 检查GRID_SIZE * CELL_SIZE是否超过窗口尺寸:如果计算出的矩形坐标超出了窗口范围,自然无法显示,可打印几个i*CELL_SIZE.0和j*CELL_SIZE.1的值,确认是否在窗口宽高范围内。

3. 改用MeshBuilder批量创建矩形

循环中反复创建单个Mesh可能触发隐藏的渲染问题,改用MeshBuilder批量构建所有矩形的合并Mesh,既提升性能也能规避此类问题:

fn draw(&mut self, ctx: &mut ggez::Context) -> GameResult {
    let mut canvas = graphics::Canvas::from_frame(ctx, Color::WHITE);
    let mut mesh_builder = graphics::MeshBuilder::new();

    for i in 0..GRID_SIZE.0 {
        for j in 0..GRID_SIZE.1 {
            if self.grid[i][j] {
                mesh_builder.rectangle(
                    DrawMode::fill(),
                    Rect::new(
                        i as f32 * CELL_SIZE.0,
                        j as f32 * CELL_SIZE.1,
                        CELL_SIZE.0,
                        CELL_SIZE.1,
                    ),
                    Color::BLACK,
                )?;
            }
        }
    }

    let rect_mesh = mesh_builder.build(ctx)?;
    canvas.draw(&rect_mesh, graphics::DrawParam::default());

    canvas.finish(ctx)?;
    Ok(())
}

4. 确认视图投影设置

如果你的窗口坐标系统有自定义需求,可显式设置Canvas的投影矩阵,确保矩形在可视范围内:

let (win_w, win_h) = graphics::drawable_size(ctx);
// 设置正交投影,Y轴向下适配ggez默认坐标
canvas.set_projection(graphics::Transform::orthographic(0.0, win_w, win_h, 0.0));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 13:52:11