关于C#:如何在SDL 2中绘制矩形以及渲染器到底是什么

How to draw a rectangle in SDL 2 and what exactly is a renderer

我的问题集中在SDL 2

我不太清楚什么是渲染器。我可以有多个渲染器,还是总是只有一个?
例如,如何使用渲染器在具有不同颜色的背景上绘制具有特定颜色的矩形?
我相信答案在于以下功能:SDL_RenderDrawRect()SDL_RenderFillRect()我对吗?

就像我说的那样,问题是我不了解渲染。我知道曲面和发白的工作原理,但我不知道渲染器确切地象征着什么。

如果有人可以告诉我该怎么做,我想我会理解渲染的工作原理。

到目前为止,我有这个:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <SDL.h>

int main(int argc, char* argv[]) {

    //Initialization
    SDL_Init(SDL_INIT_EVERYTHING);

    //Window
    SDL_Window *MainWindow = SDL_CreateWindow("My Game Window",
                                  SDL_WINDOWPOS_CENTERED,
                                  SDL_WINDOWPOS_CENTERED,
                                  640, 480,
                                  SDL_WINDOW_SHOWN
                                  );

    //Renderer
    SDL_Renderer *Background = SDL_CreateRenderer(MainWindow, -1, 0);

    SDL_SetRenderDrawColor(Background, 255, 255, 255, 255);

    SDL_RenderClear(Background);

    SDL_Delay(3000);

    //Clean up
    SDL_DestroyWindow(MainWindow);
    SDL_Quit();

    return 0;
}


对于问题的第一部分,请参阅此SO问题。

关于您的代码为什么不做很多事情:

您正确地需要使用SDL_RenderDrawRect()SDL_RenderFillRect()
SDL_RenderDrawRect将绘制一个未填充的矩形。 SDL_RenderFillRect将被填充(希望很明显)。

使用SDL_renderer,您需要调用SDL_RenderPresent,将"场景"复制到屏幕。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
...
 //Renderer
SDL_Renderer* renderer = SDL_CreateRenderer(MainWindow, -1, 0);

SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);

SDL_RenderClear(renderer); // fill the scene with white

SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); // the rect color (solid red)
SDL_Rect rect(0, 0, 100, 50); // the rectangle
SDL_RenderFillRect(renderer, &rect);
SDL_RenderPresent(renderer); // copy to screen

SDL_Delay(3000);
...