Уроки Sdl 2: Урок 1 — Привет, Sdl 2

Всем привет! Решил посмотреть SDL 2, но на русском ничего полезного не нашел.

Я решил написать свой, движимый вдохновением.

отсюда .

Я пропущу установку SDL 2 и начну сразу с написания программ, итак:



Ваше первое окно

Начнем с подключения SDL 2.
  
  
  
  
  
  
   

#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;

Давайте немного посмотрим на код. Main принимает параметры командной строки из командной строки; они должны быть приняты.

Далее мы инициализируем SDL 2 с помощью функции SDL_Init() .

Мы передали это дальше SDL_INIT_EVERYTHING , а это значит, что мы инициализируем все модули SDL (видео, аудио и т. д.).

Есть еще несколько флагов для SDL_Init: Флаги SDL_INIT_TIMER — подключение таймера; SDL_INIT_AUDIO — аудиосвязь; SDL_INIT_VIDEO — видеосвязь, события подключаются автоматически; SDL_INIT_JOYSTICK — подключение управления джойстиком; SDL_INIT_HAPTIC — тактильная подсистема (не знаю, что это, если честно); SDL_INIT_GAMECONTROLER — подключает управление, джойстик подключается автоматически; SDL_INIT_EVENTS — включает обработку событий; SDL_INIT_EVERYTHING — соединяет все перечисленное выше; SDL_INIT_NOPARACHUTE — проверка на совместимость.

Далее создаем окно с функцией 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 .

Существуют и другие флаги для создания окна.

Флаги SDL_WINDOW_FULLSCREEN — открывает окно в полноэкранном режиме, меняет разрешение рабочего стола; SDL_WINDOW_FULLSCREEN_DESKTOP — открывает окно в полноэкранном режиме с разрешением заданного рабочего стола; SDL_WINDOW_OPENGL - окно с поддержкой OpenGL; SDL_WINDOW_HIDDEN - окно скрыто; SDL_WINDOW_BORDERLESS - окно без рамы; SDL_WINDOW_RESIZABLE — вы можете изменить размер окна; SDL_WINDOW_MINIMIZED — окно свернуто; SDL_WINDOW_MAXIMIZED — окно развернуто на максимум; Если мы сейчас скомпилируем и запустим программу, то увидим окно размером 640х480, залитое белым цветом, которое через мгновение закроется.

Замечательный! Чтобы немного полюбоваться этим чудом, мы можем написать 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 (красный, зеленый, синий) для установки цвета.

И в конце нам следует обновить окно функцией SDL_UpdateWindowSurface() , чтобы он отображал то, что мы ему сказали.

На этом этапе при запуске программа отобразит окно, залитое ярко-зеленым цветом, которое не закроется в течение 2 секунд. После завершения работы программы нам необходимо очистить оперативную память от ненужных файлов, закрыть окно и в целом обеспечить корректное завершение работы программы.

В этом нам помогут специально подготовленные функции.



SDL_DestroyWindow(window); SDL_Quit();

Функция SDL_DestroyWindow() закрывает окно и функция SDL_Выход() деинициализирует все модули, подключенные ранее функцией 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; };

Всем удачи! Следующий урок > > Теги: #Разработка игр #game #gamedev #gamedevelopment #C++ #sdl

Вместе с данным постом часто просматривают: