ГлавнаяРегистрацияВход
Приветствую Вас Гость | RSS
Главная » Статьи » Game Maker » Game Maker

Использование DLL библиотек

Использование DLL библиотек

Это функциональное назначение доступно только в Pro издании Game Maker.

Пожалуйста, обратите внимание, что начиная с версии 7 есть новый механизм расширения в Game Maker. Строго рекомендуется использовать этот механизм расширения, а не функции, описанные в этом разделе. За подробностями обращайтесь на http://www.yoyogames.com/extensions. Эти функции оставлены для совместимости с пришлыми версиями.

В тех случаях, когда функциональных возможностей GML для Ваших грандиозных планов не хватает - Вы можете реально расширить возможности, используя плагины. Плагины должны быть в форме DLL файла (динамически загружаемых библиотек). В таком DLL файле Вы можете определить функции. Такие функции могут быть написаны на любом языке программирования, которые поддерживают создание DLL (например, Delphi, Visual C++, Visual Basic и т.д.). Для этого Вам необходимо как минимум знать один из таких языков и иметь опыт программирования. Плагины с функциями должны иметь специфический формат. Они могут содержать между 0 и 16 аргументов, каждый из которых может быть вещественным числом (double in C) или строкой с нулевым символом в конце. (Для плагинов содержащих более четырёх аргументов, только реальные аргументы поддерживаются на данный момент). Они должны возвращать либо вещественную строку, либо строку с нулевым символом в конце.

В Delphi для создания DLL библиотеки Вы выбираете пункт New из меню File и выбираете DLL. Далее приводится пример DLL, который Вы можете использовать в Game Maker написанный в Delphi. (Обратите внимание, что это - Delphi код - не GML код!)

library MyDLL;
 
uses SysUtils, Classes;
 
function MyMin(x,y:double):double;  cdecl;
begin
  if x<y then Result := x else Result := y;
end;
 
var res : array[0..1024] of char;
 
function DoubleString(str:PChar):PChar; cdecl;
begin
  StrCopy(res,str);
  StrCat(res,str);
  Result := res;
end;
 
exports MyMin, DoubleString;
 
begin
end.

Эта DLL определяет две функции: MyMin, которая берёт два реальных параметра и возвращает минимальный из этих двух, и DoubleString, которая удваивает строку. Обратите внимание, что нужно быть внимательным с использованием памяти. Именно поэтому объявлена результирующей глобальная строковая. Также обратите внимание на использование cdecl - соглашений о вызовах. Это важно. Как только Вы создали DLL в Delphi, у Вас получится файл MyDLL.DLL. Этот файл должен быть помещён в каталог с Вашей игрой. (Или иное место, где Windows может найти его).

Чтобы использовать указанный DLL в Game Maker - Вы сначала должны определить внешние функции, которые хотите использовать и какой тип аргументов они берут. Для этого в GML имеются следующие функции:

Каждая из этих функций возвращает идентификатор внешней функции, которая должна использоваться для его вызова. Так в вышеприведенном примере, в начале игры Вы использовали бы следующий GML код:

{
  global.mmm = external_define('MyDLL.DLL','MyMin',dll_cdecl,
                                     ty_real,2,ty_real,ty_real);
  global.ddd = external_define('MyDLL.DLL','DoubleString',dll_cdecl,
                                     ty_string,1,ty_string);
}

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

external_call(id,arg1,arg2,...) Вызывает внешнюю функцию с заданным идентификатором и заданными аргументами. Вам нужно обеспечить правильное количество аргументов правильного типа (real или string). Эта функция возвращает результаты внешней функции.

Итак, например, Вы можете написать:

{
  aaa = external_call(global.mmm,x,y);
  sss = external_call(global.ddd,'Hello');
}

Если Вам больше не нужно использовать DLL, то лучше её выгрузить.

external_free(dll) Выгружает DLL с заданным именем. Её действительно важно выгружать из игры. Также DLL долго выгружается и не может быть удалена. Лучше всего выгружайте её в событии завершения игры.

Вы возможно не знаете как пишется функция в DLL, которая что-нибудь делает в игре. Например, Вы захотели создать DLL, которая добавляет образцы объектов в Вашу игру. Самый простой способ состоит в том, чтобы позволить своей функции в DLL возвращать строку, которая содержит часть кода GML. Эта строка, содержащая часть GML, может быть выполнена, используя функцию GML

execute_string(str,arg0,arg1,...) Выполняет фрагмент кода в строке str с заданными параметрами.

Дополнительно Вы можете позволить DLL создать файл со сценарием, который может быть выполнен (эта функция также может использоваться, чтобы позже изменить поведение игры).

execute_file(fname) Выполняет фрагмент кода в файле.

Теперь Вы можете вызывать внешнюю функцию и затем выполнить результирующую строку, например, следующим образом:

{
  ccc = external_call(global.ddd,x,y);
  execute_string(ccc);
}

В некоторых, редких случаях Вашей DLL может понадобиться знать о настройках основного графического окна игры. Это можно сделать с использованием следующей функции, и тогда может быть использована DLL:

window_handle() Возвращает настройки окна для основного экрана.

Обратите внимание, что DLL не могут использоваться в безопасном режиме.

Использование внешних DLL - чрезвычайно мощная функция. Используйте их только в том случае, если действительно уверены в том, что делаете.

 

Категория: Game Maker | Добавил: Strateg (27.12.2010)
Просмотров: 2839 | Комментарии: 2 | Рейтинг: 3.0/2
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Меню сайта

-=ЯП=-

Конструктор\Движки

Игроделу

Наш опрос
Сколько вы уже создали игр?
Всего ответов: 67

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

DiamonD
Бесплатный конструктор сайтов - uCoz