- PVSM.RU - https://www.pvsm.ru -
Всем привет! Решил, вот, посмотреть на SDL 2, но на русском ничего толкового не нашел. Решил написать свое, питаясь вдохновением отсюда [1].
Установку SDL 2 я пропущу, а начну сразу с написания программ, итак:
начнем с подключения SDL 2.
#include <SDL2/SDL.h>
Здесь же объявим несколько глобальных переменных.
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
Далее открываем всем знакомую функцию main.
int main (int argc, char ** args) {
if( SDL_Init( SDL_INIT_EVERYTHING ) != 0 )
{
return 1;
}
SDL_Surface* screen_surface = NULL;
SDL_Window* window = NULL;
Давайте немного разберем код. В main из командной строки принимаются параметры командной строки, их нужно обязательно принять. Далее мы инициализируем SDL 2 функцией SDL_Init(). Мы передали в нее SDL_INIT_EVERITHING, что означает, что мы инициализируем все модули SDL (видео, аудио и т. д.). Есть еще несколько флагов для SDL_Init:
Далее создаем окно функцией SDL_CreateWindow(). Если что-то пошло не так, как задумывалось, возвращаем 1.
window = SDL_CreateWindow("Hello, SDL 2!",SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED, SDL_SCREEN_WIDTH, SDL_SCREEN_HEIGHT,
SDL_WINDOW_SHOWN);
if (window == NULL) {
return 1;
}
Функция SDL_CreateWindow() принимает значения имени окна, позиции окна по OX, позиции окна по OY, ширину окна, высоту окна и флаги. Сейчас мы обойдемся флагом SDL_WINDOW_SHOWN.
Есть и другие флаги для создания окна.
Если сейчас скомпилировать и запустить программу, то мы увидим окно, размером 640x480, залитое белым цветом, которое через мгновение закрывается. Чудесно! Чтобы немного полюбоваться этим чудом, можем написать SDL_Delay(2000). Оно заставит программу зависнуть на 2 секунды.
Просто окно это, конечно же, хорошо, но рисовать в нем было бы еще круче, согласны? Для этого создадим поверхность, на которой будем все рисовать, т. к. непосредственно в окне рисовать как-то некрасиво, что ли.
screen_surface = SDL_GetWindowSurface(window);
SDL_FillRect(screen_surface, NULL, SDL_MapRGB(screen_surface->format, 0, 255, 0));
SDL_UpdateWindowSurface(window);
Сначала мы получаем поверхность окна функцией SDL_GetWindowSurface(). Она сделана для того, чтобы не надо было указывать размеры поверхности, её формат, а сразу получить готовую поверхность. Так же эту поверхность не надо отрисовывать в окне — она сама всё сделает.
Потом мы используем SDL_FillRect(), чтобы зарисовать нашу поверхность зеленым. Мы написали SDL_MapRGB, сказав тем самым программе, что мы воспользуемся RGB(Red Green Blue) для задания цвета.
И в конце нам следует обновить окно функцией SDL_UpdateWindowSurface(), чтобы в нем отобразилось то, что мы ему сказали.
На данном этапе, при запуске, программа отобразит окно, залитое ярко-зеленым цветом, которое не будет закрываться в течении 2-х секунд.
После завершения программы нам нужно очистить ОЗУ от ненужных файлов, закрыть окно, в целом, обусловить корректное завершение программы. В этом нам помогут специально подготовленные функции.
SDL_DestroyWindow(window);
SDL_Quit();
Функция SDL_DestroyWindow() закрывает окно, а функция SDL_Quit() разинициализирует все модули, подключенные ранее функцией SDL_Init().
Ну что же, урок №1 подошел к концу, надеюсь, всё было понятно. Вот такой код у меня вышел в конце:
#include <SDL2/SDL.h>
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
int main (int argc, char ** args) {
if( SDL_Init( SDL_INIT_EVERYTHING ) != 0 )
{
return 1;
}
SDL_Surface* screen_surface = NULL;
SDL_Window* window = NULL;
window = SDL_CreateWindow("Hello, SDL 2!",SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT,
SDL_WINDOW_SHOWN);
if (window == NULL) {
return 1;
}
screen_surface = SDL_GetWindowSurface(window);
SDL_FillRect(screen_surface, NULL, SDL_MapRGB( screen_surface->format, 0, 255, 0));
SDL_UpdateWindowSurface(window);
SDL_Delay(2000);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
};
Всем удачи!
Автор: LLEMOON
Источник [2]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/c-3/319005
Ссылки в тексте:
[1] отсюда: http://lazyfoo.net/tutorials/SDL/index.php#Event%20Driven%20Programming
[2] Источник: https://habr.com/ru/post/453700/?utm_campaign=453700
Нажмите здесь для печати.