繁体   English   中英

如何在 SDL2 中将多个矩形绘制到屏幕上?

[英]How do I draw multiple rects to the screen in SDL2?

我首先尝试使用SDL_RenderFillRect()SDL_RenderFillRects()来完成它,但是它没有用,我决定研究使用表面,如它在SDL_FillRect()中所述的文档中所述,它也需要一个表面,所以我确信绘制多个的关键是使用表面。 但是,我发现文档很难理解(我什至不知道从哪里开始查找)。 谁能给我一个纲要。 我会发送代码,但是我把它搞砸了,我绝对确定代码无论如何都不是问题。

编辑:我认为我遇到了这个问题,因为我认为 SDL_Rect(s) 被读写,结果它是只读的。 现在仍然不知道该怎么办,顺便说一句,我正在 c 中编码。

编辑:这是我尝试过的

我没有具体的代码,因为它不起作用,但是我的想法从根本上是有缺陷的,因为我的思考过程是:

1.制作一个 SDL_Rect 数组。 2.制作一个矩形并将 append 放到这个数组中。 3.渲染它。 4. 对不同颜色的 arrays 执行此操作。

我相信这行不通。 我首先听说你需要制作纹理或其他东西。 我还不确定你能告诉我如何使用 SDL_Textures 来做这件事。

我不确定您的目标是什么,但这里有一个简单的示例,演示了使用SDL_RenderFillRect绘制 5 个不同 colors 和SDL_RenderFillRects的矩形来绘制 5 个相同颜色的矩形。

希望您可以混合和匹配其中的一些以获得您正在寻找的东西。

#include "SDL.h"
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *args[])
{
    SDL_Window *win;
    SDL_Renderer *renderer;

    if (SDL_Init(SDL_INIT_EVERYTHING) != 0)
    {
        fprintf(stderr, "SDL_Init Error: %s\n", SDL_GetError());
        return EXIT_FAILURE;
    }

    win = SDL_CreateWindow("Hello World!", 100, 100, 400, 400, SDL_WINDOW_SHOWN);
    if (win == NULL)
    {
        fprintf(stderr, "SDL_CreateWindow Error: %s\n", SDL_GetError());
        return EXIT_FAILURE;
    }

    renderer = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
    if (renderer == NULL)
    {
        fprintf(stderr, "SDL_CreateRenderer Error: %s\n", SDL_GetError());
        SDL_DestroyWindow(win);
        SDL_Quit();
        return EXIT_FAILURE;
    }

    SDL_RenderClear(renderer);

    SDL_Rect single_rect;
    SDL_Rect multi_rect[5];
    for (int i = 0; i < 5; i++)
    {
        single_rect.w = 50;
        single_rect.h = 50;
        single_rect.x = i * 50;
        single_rect.y = i * 50;
        SDL_SetRenderDrawColor(renderer, 255, (Uint8)(i * 50), 0, 255);
        SDL_RenderFillRect(renderer, &single_rect);

        multi_rect[i].w = 50;
        multi_rect[i].h = 50;
        multi_rect[i].x = i * 50 + 50;
        multi_rect[i].y = i * 50;
    }
    SDL_SetRenderDrawColor(renderer, 0, 255, 255, 255);
    SDL_RenderFillRects(renderer, multi_rect, 5);

    SDL_RenderPresent(renderer);
    SDL_Delay(5000);

    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(win);
    SDL_Quit();

    return EXIT_SUCCESS;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM