Всем привет! Решил посмотреть 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
-
«Я Обычный Стилус Для Емкостных Экранов»
19 Oct, 24 -
Время Возвращения Пришло
19 Oct, 24