首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用sdl2的SDL_RenderDrawRect绘制棋盘

用sdl2的SDL_RenderDrawRect绘制棋盘
EN

Stack Overflow用户
提问于 2021-03-01 22:32:33
回答 1查看 262关注 0票数 0

我是SDL2的新手,作为我的第一个项目,我只想创建一个棋盘。事实证明,这比我想象的要难。

我已经尝试了很多不同的方法来画棋盘的区域。

,这是当前状态:

代码语言:javascript
复制
#include 

int main()
{
    bool quit = false;
    SDL_Event event;
    
    SDL_Init(SDL_INIT_EVERYTHING);
    
    SDL_Window *window = SDL_CreateWindow("Chess", SDL_WINDOWPOS_UNDEFINED,
        SDL_WINDOWPOS_UNDEFINED, 680, 680, 0);
    
    SDL_Renderer *render = SDL_CreateRenderer(window, -1,
        SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);    

    for (int x = 0; x > 3; x++) {
        for (int y = 0; x > 8; x++) {
            SDL_Rect rect;
            rect.x = x*10;
            rect.y = y*10;
            rect.w = 128;
            rect.h = 128;
        
            SDL_SetRenderDrawColor(render, 159, 84, 8, 255);
            SDL_RenderFillRect(render, &rect);
        }
    }    
    SDL_RenderPresent(render);
    while (!quit) {
        SDL_WaitEvent(&event);
        
        switch (event.type) {
            case SDL_QUIT:
                quit = true;
                break;
        }
    }       
    SDL_Quit();     
    return 0;
}

当我使用时,没有矩形想要显示

在一个循环中。你知道为什么会这样吗?

干杯!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-01 23:03:07

for循环中有多个错误。

您必须更改for循环中的条件。迭代变量(x和y)都从0开始,但是运行foor循环的条件是它们大于3或8,因此它们不会被执行。将其更改为小于该值(<而不是>)

您必须更改第二个for循环的迭代变量。您创建了y,但条件和值的更改是针对x的

您的矩形是128x128大小,但是您将循环中的x和y乘以10,这意味着您的矩形将会重叠。你必须将它至少乘以128。

如果你看一个国际象棋棋盘,从左上角开始,从左到右,每隔一段时间就会着色一次。要实现这一点,你必须从左上角开始,遍历每个单元格,然后跳到下一行。每隔一段时间,你必须绘制一个矩形。

这是你的算法的一个稍微编辑过的版本:

代码语言:javascript
复制
int startPos = 0;
for (int y = 0; y < 8; y++) {       
    for (int x = startPos; x < 3; x+=2) {           
            SDL_Rect rect;
            rect.x = x * 129;
            rect.y = y * 129;
            rect.w = 128;
            rect.h = 128;
            SDL_SetRenderDrawColor(render, 159, 84, 8, 255);
            SDL_RenderFillRect(render, &rect);              
    }
    startPos = 1 - startPos;
}

说明:在第一行中,第一个字段将是彩色的,因为startPos是0。由于每一行都具有与其前一行相反的起始位置,因此在绘制一行的最后一个单元格时,我们必须立即更改startPos。由于我们只需要每隔一次绘制一次单元格,因此每次迭代都必须将x增加2

希望这对你有一点帮助

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66424009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档