пятница, 17 августа 2012 г.

Урок 1 - подключение.

Итак, сегодня мы начнем небольшой цикл статей по базовым вопросам Quad Engine.
Статьи будут короткими, лаконичными и понятными, как и сам движок, но при этом крутыми и мощными, опять же как он. Среда работы - Delphi.

Тема № 1: Подключение движка и базовые функции.

Все очень просто.
Помимо собственно среды для Delphi нам понадобится QuadEngine.dll, файл с описанием интерфейсов – QuadEngine.pas и заголовочные файлы DirectX
Динамическая библиотека ложится рядом с исполняемым файлом, а заголовки подключаются к проекту.
Cоздадим стандартную форму и нарисуем на ней что-нибудь.
Кода будет немного:

     //Добавим заголовки движка
  uses QuadEngine;
  //нам понадобятся интерфейсы устройства, отрисовщика и таймера
    var
      QuadDevice: IQuadDevice;
      Quad: IQuadRender; 
      Timer: IQuadTimer;
    //для таймера нужна специальная процедура - она будет вызываться при срабатывании таймера
    procedure OnTimer(out delta: Double); stdcall;
    //в процедуре создания формы создаем устройство и отрисовщик
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      QuadDevice:= CreateQuadDevice;
      QuadDevice.CreateRender(Quad); 
      //для нормальной работы понадобится handle окна,
      //ширина и высота области отрисовки 
      //и дополнительные параметры – полноэкранный 
      //или оконный режим и вести или нет логи.
      Quad.Initialize(Form1.Handle, 
        Form1.ClientWidth, Form1.ClientHeight, False);
      //все, можно рисовать, рисовать мы будем в таймере
      //создаем таймер, указываем его параметры и запускаем
      QuadDevice.CreateTimer(Timer);
      Timer.SetCallBack(OnTimer);
      Timer.SetInterval(5);
      Timer.SetState(True);
    end;
    //рисовать будем в реализации процедуры таймера
    //очистим экран черным и нарисуем прямоугольничек:)
    procedure OnTimer(out delta: Double); stdcall;
    begin
      Quad.BeginRender;
      Quad.Clear(RGB(0, 0, 0));
      Quad.Rectangle(100, 100, 200, 200, RGBA(255, 255, 0, 50));
      Quad.EndRender;
    end;

Пример
Конечно никто не запрещает использовать обычный таймер.
Цвета можно задать и восмизначным шестнадцатеричным числом. Первый байт - прозрачность, остальные - цвет в RGB формате.
Собственно все, можно пойти и наградить себя чашкой кофе. Правда получается вот такая простецкая вещь, но на то он и первый урок:


10 комментариев:

  1. Привет Автор! Я начинающий. У меня вопрос, как установить этот игровой движок на Delphi? Скачал Delphi 7, а что дальше не знаю.

    ОтветитьУдалить
  2. Добрый день! Для установки, если это так можно назвать, необходимо скопировать qei.dll в папку с ЕХЕ файлом, а все заголовочные файлы положить рядом с проектом.

    Самый простой вариант для этого - скачать архив, прилагающийся к этому примеру.

    Также кране рекомендую обновить версию делфи до 2009 или выше, так как есть доля вероятности, что более новые версии движка не будут поддерживать такие старые IDE как Delphi7.

    ОтветитьУдалить
  3. Этот комментарий был удален автором.

    ОтветитьУдалить
  4. Увы финальная никак не выпускается, постоянно находится что-то, что хочется доделать. Однако, скачать версию 0.4 вполне можно с этим уроком, она (разумеется) идет в комплекте.

    ОтветитьУдалить
  5. А почему иногда при закрытии программы возникает ошибка
    ---------------------------
    Unexpected Memory Leak
    ---------------------------
    An unexpected memory leak has occurred. The unexpected small block leaks are:
    69 - 76 bytes: TTimerThread x 1

    ОтветитьУдалить
  6. Это утечка памяти, причем, если там написано про таймер - это ошибка движка. Если там указаны другие строки - это ваша ошибка, ее желательно найти(не обнулен интерфейс или не уничтожен класс).
    А вообще это случайность, автор оставил в используемой версии вывод дебажных данных, надо просить у него более свежую версию.

    ОтветитьУдалить
  7. Этот комментарий был удален автором.

    ОтветитьУдалить
  8. А кто-то может описать как сделать то же самое на C#. А то вот я не хочу даже притрагиваться к делфи)
    Мне хотя бы что касается интерфейсов.

    ОтветитьУдалить
  9. Добрый день. Сразу извиняюсь за долгий ответ, был вне сети неделю.

    В C# всё делается практически точно так же. Отличия только в заголовочном файле (он прилагается и для C#) и языковых различиях.

    >>Мне хотя бы что касается интерфейсов.
    Вот тут я немного не понял вопроса. Можете пояснить?

    ОтветитьУдалить