Olá pessoal, esta é a sexta lição sobre SDL 2 e saiu pequena, mas vale a pena prosseguir. Todas as lições estão
aqui .
Nesta lição, desenharemos o desenho de primitivas. Vamos começar e bem-vindo à lição
Primeiro, vamos ver o que é primitivo. Uma primitiva gráfica é o objeto geométrico mais simples exibido na tela: um ponto, um segmento de linha, um retângulo, um arco, um círculo etc. No SDL 2, podemos desenhar apenas pontos, retângulos e linhas.
Vamos ao código
#include <SDL2/SDL.h> #include <iostream> using namespace std; int SCREEN_WIDTH = 640; int SCREEN_HEIGHT = 480; SDL_Window *win = NULL; SDL_Renderer *ren = NULL;
Não vou descrever a declaração de variáveis, vamos seguir em frente.
bool init() { bool ok = true; if (SDL_Init(SDL_INIT_VIDEO) != 0) { cout << "Can't init SDL: " << SDL_GetError() << endl; } win = SDL_CreateWindow("", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); if (win == NULL) { cout << "Can't create window: " << SDL_GetError() << endl; ok = false; } ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED); if (ren == NULL) { cout << "Can't create renderer: " << SDL_GetError() << endl; ok = false; } return ok; }
No
Init, inicialize o SDL 2, crie uma janela e renderize aqui também, não permaneça.
Eu não escrevo a função
Load , pois não precisamos carregar nada.
Na função
Quit , simplesmente removemos a janela, renderizamos e inicializamos o SDL 2.
void quit() { SDL_DestroyWindow(win); win = NULL; SDL_DestroyRenderer(ren); ren = NULL; SDL_Quit; }
Vou pular a chamada para a função
Init e passar para a parte mais interessante. Para desenhar um retângulo, precisamos criar um objeto do tipo
SDL_Rect . Suas coordenadas e dimensões são necessárias para o desenho.
Um pouco sobre
SDL_Rect : esse tipo de dado é uma matriz de 4 números:
x ,
y ,
weh - nessa ordem. Ou seja, este código:
SDL_Rect rect = {1, 1, 1, 1}; - completamente correto.
Isso completa a teoria sobre
SDL_Rect, vamos começar a escrever código.
SDL_SetRenderDrawColor(ren, 0x00, 0x00, 0x00, 0x00); SDL_RenderClear(ren); SDL_SetRenderDrawColor(ren, 0xFF, 0xFF, 0xFF, 0xFF); SDL_Rect rect1 = {10, 10, 50, 50}; SDL_RenderFillRect(ren, &rect1);
Aqui fomos informados ao render para pintar de preto e preenchê-los com toda a janela. Depois disso, eles disseram para pintar de branco. Em seguida, criamos um retângulo com coordenadas (10; 10) e dimensões 50x50. A função
SDL_RenderFillRect desenha um retângulo.
Desenhar apenas o contorno do retângulo não é muito diferente.
SDL_Rect rect2 = {70, 10, 50, 50}; SDL_RenderDrawRect(ren, &rect2);
Criamos um retângulo e chamamos a função
SDL_RenderDrawRect . Ela desenha apenas o contorno do retângulo na tela.
O próximo passo é desenhar uma linha.
SDL_RenderDrawLine(ren, 10, 70, 640 - 10, 70);
Não é necessário um retângulo para desenhar uma linha. A função
SDL_RenderDrawLine aceita valores de renderização e quatro coordenadas. Estas são as coordenadas do ponto inicial e final. Decidi desenhar uma linha horizontal recuada das bordas por 10 pixels.
Desenhar pontos quase não é diferente de desenhar linhas. Chamamos a função
SDL_RenderDrawPoint e passamos a renderização e as coordenadas do ponto. Mas apenas para desenhar um ponto não é interessante, vamos escrever
para melhor, no qual através de 3 pixels vamos desenhar pontos.
for (int i = 10; i <= 640-10; i +=4 ) { SDL_RenderDrawPoint(ren, i, 90); }
Temos uma linha pontilhada horizontal de pontos.
Neste desenho parou. Resta apenas atualizar a tela, definir o tempo de pausa, sair e retornar
0 .
SDL_RenderPresent(ren); SDL_Delay(5000); quit(); return 0; }
Isso conclui nossa lição, eis o código completo:
#include <SDL2/SDL.h> #include <iostream> using namespace std; int SCREEN_WIDTH = 640; int SCREEN_HEIGHT = 480; SDL_Window *win = NULL; SDL_Renderer *ren = NULL; bool init() { bool ok = true; if (SDL_Init(SDL_INIT_VIDEO) != 0) { cout << "Can't init SDL: " << SDL_GetError() << endl; } win = SDL_CreateWindow("", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); if (win == NULL) { cout << "Can't create window: " << SDL_GetError() << endl; ok = false; } ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED); if (ren == NULL) { cout << "Can't create renderer: " << SDL_GetError() << endl; ok = false; } return ok; } void quit() { SDL_DestroyWindow(win); win = NULL; SDL_DestroyRenderer(ren); ren = NULL; SDL_Quit; } int main (int arhc, char ** argv) { if (!init()) { quit(); system("pause"); return 1; } SDL_SetRenderDrawColor(ren, 0x00, 0x00, 0x00, 0x00); SDL_RenderClear(ren); SDL_SetRenderDrawColor(ren, 0xFF, 0xFF, 0xFF, 0xFF); SDL_Rect rect1 = {10, 10, 50, 50}; SDL_RenderFillRect(ren, &rect1); SDL_Rect rect2 = {70, 10, 50, 50}; SDL_RenderDrawRect(ren, &rect2); SDL_RenderDrawLine(ren, 10, 70, 640 - 10, 70); for (int i = 10; i <= 640-10; i +=4 ) { SDL_RenderDrawPoint(ren, i, 90); } SDL_RenderPresent(ren); SDL_Delay(5000); quit(); return 0; }
E eu digo adeus a você, tchau a todos!
<< Lição anterior || Próxima lição
>>