Епізод 01. Вікно та ігровий цикл

Що ж, пора починати. Найперший крок по дорожній карті - створення вікна та ігрового циклу.

Почнемо з найпростішого - створення вікна за допомогою бібліотеки SDL. Окрім самого вікна, ще повинен бути робочий цикл виконання програми та реакція на закриття вікна. Отже, запускаємо середовище розробки Lazarus або CodeTyphon і виконуємо наступні дії (як на відео):

  • Створюємо новий проект "Нова програма" (не "Застосунок!")
  • Зберігаємо його в папку "demo01", яку створюємо білля папки з модулями SDL2
  • Прописуємо в параметрах проекту шлях до модулів SDL 2.0 та змінюємо шляхи вихідної теки модулів та цільового файлу (останні два просто для зручності роботи - розділити сирці від бінарників)

В результаті вийшов ось такий код, який можна скачати з Github:


program demo01;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  Classes
  { you can add units after this },sdl2;
var
  SDLWindow : PSDL_Window;     //вікно
  SDLRenderer : PSDL_Renderer; //візуалізатор
  SDLEvent : PSDL_Event;       //події
  isRun : Boolean;             //ознака виконання циклу


begin
  //ініціалізація бібліотеки SDL 2.0
  if SDL_Init(SDL_INIT_EVERYTHING)>=0 then begin
    //успішна ініціалізація - створюємо вікно
    SDLWindow:=SDL_CreateWindow('demo01',
                               SDL_WINDOWPOS_UNDEFINED,
                               SDL_WINDOWPOS_UNDEFINED,
                               640,
                               480,
                               SDL_WINDOW_SHOWN);
    //якщо вікно створене, створюємо візуалізатор
    if SDLWindow<>nil then begin
      SDLRenderer:=SDL_CreateRenderer(SDLWindow,-1,0);
      if SDLRenderer=nil then begin
        WriteLN('SDL error: ',SDL_GetError);
        Exit;
      end;
    end;
    //виділення пам'яті для структури обробки подій
    New(SDLEvent);
    //встановлення ознаки виконання циклу і його запуск
    isRun := true;
    while isRun=true do begin
      //встановимо колір вікна в голубий
      SDL_SetRenderDrawColor(SDLRenderer,0,128,255,255);
      //очисстити вікно
      SDL_RenderClear(SDLRenderer);
      //показати вікно на екран
      SDL_RenderPresent(SDLRenderer);
      //намагаємось відловити подію закриття вікна
      if SDL_PollEvent(SDLEvent)=1 then begin
        if SDLEvent^.type_=SDL_QUITEV then isRun:=false;
      end;
    end;
    //прибрати за собою - в оберненому порядку створення
    Dispose(SDLEvent);
    SDL_DestroyRenderer(SDLRenderer);
    SDL_DestroyWindow(SDLWindow);
    SDL_Quit();
  end;
end.

Спробуємо запустити цей код на виконання. Якщо все зроблено правильно, то в результаті ми отримаємо вікно з голубим фоном і заголовком "demo01", яке можна закрити, натиснувши на хрестик. Я не буду в деталях розглядати код цього прикладу, оскільки він достатньо прокоментований що де і як відбувається.

В наступному епізоді спробуємо розділити цей код на окремі логічні фрагменти і спробуємо сформувати кістяк для майбутньої гри.

← попередня частина | наступна частина →

Немає коментарів:

Дописати коментар