Отправляет email-рассылки с помощью сервиса Sendsay

Как заработать в интернет

  Все выпуски  

От идеи до игры


От идеи до игры

Выпуск 2

 

Прошла неделя, и настало время для второго выпуска моей рассылки!
Omega Engine SDK, а непосредственно сам движок весит 40 кб.


А теперь перейдем непосредственно к загрузке  и выводу спрайтов, да это наша сегодняшняя тема урока!


В первом уроке как вы помните, мы научились инициализировать движок, если кто не знает это вещь необходимая и делать это нужно всегда, иначе ваша игра не будет работать!


Итак, сегодня и в будущем мы всегда будем отталкиваться от первого урока, т.к. мы будем просто-напросто дописывать код в процедуры, такие как Load, Init, Draw,….


Т.к. в прошлом выпуске было мало комментариев и многим это не понравилось, я решил восстановить справедливость и сегодня переписать первый урок, добавив в него больше комментариев!

Исходный код инициализации движка из первого урока с более детальными комментариями:

program FirstApplication;
uses
OMEGA in 'OMEGA.pas'; // Подключаем модуль движка к игре

var
MyTimer1 : PTimer; // Обьявляем таймер

// Процедура предназначена для быстрой загрузки ресурсов игры, например текстуры «Загрузка», что бы

//Не было видно Рабочий стол пока игра грузится!
procedure Load;
Begin
End;

// Инициализация, можно например загрузить настройки игры
procedure Init;
Begin
End;

// Отрисовка экрана, здесь думаю объяснять не надо
procedure Draw;
Begin
End;

// Процедура выхода J
procedure Quit;
Begin
End;

// Таймер, это игровой цикл здесь ведутся все расчеты например движения юнитов для последующего

//вывода на экран (процедура Draw)
procedure Timer1;
Begin
if Key_Down( K_ESCAPE ) Then OE_Quit; // В данном случае мы ждем нажатия кнопки ESC для выхода
End;

// Основной код
begin

MyTimer1 := Timer_Create( @Timer1, 1000, 0 ); // Создание таймера

// Регистрация так называемых «системных» процедур
OE_RegProcedure( SYS_FASTINIT, @Load );// Загрузка
OE_RegProcedure( SYS_INIT, @Init ); // Инициализация
OE_RegProcedure( SYS_DRAW, @Draw ); // Отрисовка
OE_RegProcedure( SYS_QUIT, @Quit ); // Выход

// Настройка опций экрана
OE_SetScreenOptions( 800, 600, 32, 0, TRUE, FALSE );

// Показываем стандартный курсор мыши
OE_ShowCursor( TRUE );

// И самое интересное – запускаем движок
OE_Init;

end.


Прочитав код мало кто может сообразить что с ним делать, ну нечего страшного, сейчас объясню.

Думаю все поняли для чего нужны процедуры Load, Init, Draw, Quit и Timer1. поэтому перейду к основному коду:


MyTimer1 := Timer_Create( @Timer1, 1000, 0 );


Функция Timer_Create назначает таймеру процедуру Timer1, устанавливает задержку вызова процедуры в 1000


Процедура OE_RegProcedure регистрирует «движковых» процедуры, первый параметр это специальная «движковая» переменная, второй это процедура, которая регистрируется для переменной.


SYS_FASTINIT «движковая» переменная для регистрации процедуры быстрой загрузки, например для быстрой загрузки текстуры «Загрузка». Значение остальных переменных, можно понять по процедурам зарегистрированным для них!


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


OE_ShowCursor отображает системный курсор если true.


OE_Init после всех приготовлений запускает движок!


Как видно в тексте нет ни одного слова про форму и VCL-компоненты вообще. Дело в том, что написание игр в большинстве случаев обходятся без них (если говорить относительно Delphi, так как очень серьезные игры пишут не на нем). Для использования данного кода есть два пути – создать пустой файл с названием, например, FirstApplication.dpr и занести туда этот код, либо выбрать пункт меню File->New и укзать Console Apllication. После надо всего-то заменить весь появившийся текст нужным нам.


Наконец после исправлений всех недочетов прошлого урока мы можем перейти непосредственно ко второму уроку!


Сегодня мы научимся загружать и выводить спрайты! Как я уже писал в начале урока  весь код я переписывать не буду а лишь добавлю в него необходимые строки, а вам нужно будет вставить эти строки в соответствующие «движковые» процедуры!

 

var
  Texture : PTexture; // Будет хранить идентификатор текстуры

// Инициализация, можно например загрузить настройки игры
procedure Init;
Begin
// Загрузка текстуры

Texture := Tex_LoadFromFile( 'tex.jpg', // Путь к фалу текстуры, измените на свое

                              $FFFFFF,         // Цвет прозрачности

                              TEX_DEFAULT );   // Загрузка со стандартными параметрами

End;

// Отрисовка экрана, здесь думаю объяснять не надо
procedure Draw;
Begin
SSprite_Draw( Texture, 800 - 128, 600 - 128, 128, 128, 255, 0, FX_DEFAULT ); // Вывод текстуры!

End;


Tex_LoadFromFile эта функция возвращает переменной Texture идентификатор текстуры если загрузка прошла удачно и имеет следующие параметры: путь к файлу, цвет прозрачности, например если у вас есть текстура скажем машинки на черном фоне и естественно в игре видеть фон текстуры не хочется вот для этого и нужен этот параметр, для черного цвета он будет равен $000000 и наконец третий параметр нужен для установки дополнительных параметров текстуры которых мы пока касаться не будем!


Процедура SSprite_Draw выводит текстуру на экран. И опять же здесь все просто! Первый параметр это идентификатор текстуры, следующие два параметра расположение текстуры по X и Y, затем два параметра это длинна и высота текстуры, далее пятый параметр это прозрачность текстуры от 0 до 255 (0 – прозрачна, 255 - видима), следующий параметр поворот текстуры и последний вывод текстуры с дополнительными параметрами, которые мы пока пропустим!

Вот и все, друзья! Думаю что на этот раз все было понятно и я дал достаточно комментариев. Если есть вопросы пишите rain.zero@mail.ru. До следующей недели!


В избранное