Що ж, пора починати. Найперший крок по дорожній карті - створення вікна та ігрового циклу.
Почнемо з найпростішого - створення вікна за допомогою бібліотеки 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", яке можна закрити, натиснувши на хрестик. Я не буду в деталях розглядати код цього прикладу, оскільки він достатньо прокоментований що де і як відбувається.
В наступному епізоді спробуємо розділити цей код на окремі логічні фрагменти і спробуємо сформувати кістяк для майбутньої гри.
Немає коментарів:
Дописати коментар