[英]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.