Окно и текст внутри на SDL

Прежде всего установите в вашей системе библиотеку SDL и SDL_ttf.
В Fedora єто делается так:

# yum install SDL-devel SDL_ttf-devel

После чего можно приступать к написанию кода.

Прежде всего подключим установленные нами библиотеки:

#include <SDL/SDL.h>

#include <SDL/SDL_ttf.h>

Определим размеры и заголовок окна.

const int WINDOW_WIDTH = 320;

const int WINDOW_HEIGHT = 240;

const char* WINDOW_TITLE = «SDL howto»;

После этого приступаем к формированию главной функции программы:

int main(int argc, char **argv)

{

Инициализиируем библиотеки:

SDL_Init( SDL_INIT_VIDEO );

TTF_Init();

Обратите внимание, что первая функция инициализирует библиотеку SDL и принимает в качестве параметра побитовую сумму необходимых комбинаций:

  • SDL_INIT_TIMER — таймер
  • SDL_INIT_AUDIO — аудио
  • SDL_INIT_VIDEO — видео
  • SDL_INIT_CDROM — работа с устройствами cd-rom
  • SDL_INIT_JOYSTICK — работа с джойстиком
  • SDL_INIT_EVERYTHING  — все что было указано выше
  • SDL_INIT_NOPARACHUTE

Нам понадобится только работа с видео. остальное в следующий раз..

Создадим окно:

SDL_Surface* screen = SDL_SetVideoMode( WINDOW_WIDTH, WINDOW_HEIGHT, 0, SDL_HWSURFACE | SDL_DOUBLEBUF );

  • SDL_HWSURFACE — создавать буфер в видео памяти
  • SDL_DOUBLEBUF — использовать двойной буфер

Третий параметр (0) — указывает SDL на то, что необходимо использовать системные настройки для цветности окна.
Первые два, как вы наверное поняли, — ширина и высота создаваемого окна.

Указываем заголовок окна:

SDL_WM_SetCaption( WINDOW_TITLE, 0 );

Второй параметр иконка для окна. 0 — стандартная иконка.

Загружаем файл со шрифтом:

TTF_Font* font = TTF_OpenFont(«ARIAL.TTF», 12);

Первый параметр — имя файл шрифта.
Второй — размер.

Зададим цвета:

SDL_Color foregroundColor = { 255, 255, 255 };

SDL_Color backgroundColor = { 0, 0, 255 };

Создаём надпись:

SDL_Surface* textSurface = TTF_RenderText_Shaded(font, «how2.org.ua», foregroundColor, backgroundColor);

Думаю с параметрами всё понятно.

Задаём размещение надписи:

SDL_Rect textLocation = { 100, 100, 0, 0 };

Для того, что бы окно не закрывалось задаём безконечный цикл обработки событий:

SDL_Event event;

bool gameRunning = true;

while (gameRunning){

   if (SDL_PollEvent(&event)){

      if (event.type == SDL_QUIT){

          gameRunning = false;

      }

   }

SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0,0));

SDL_BlitSurface(textSurface, NULL, screen, &textLocation);

SDL_Flip(screen);

}

После этого завершаем работу библиотек и программы:

SDL_FreeSurface(textSurface);

TTF_CloseFont(font);

TTF_Quit();

SDL_Quit();

return 0;
}

Компилируется всё это дело вот такой командой:

g++ sdl_text.cpp -o sdl_text -lSDL -lSDL_ttf

Кроме того, обратите внимание, что для корректной работы необходимо поместить файл со шрифтом в папку с бинарником.
У меня получилось вот так:

 

На этом пока всё. Спасибо за внимание. Мои файлы тут.

 

Похожий код:

Фото аватара
Алексей Петров

Программист, разработчик с 5 летним опытом работы. Учусь на разработчика игр на Unity и разработчика VR&AR реальности (виртуальной реальности). Основные языки программирования: C#, C++.

Оцените автора
Бла, бла код
Добавить комментарий