Dragon6 | Дата: Среда, 14 Апреля 2010, 12:35 | Сообщение # 1 |
Игродел-воитель
Сейчас нет на сайте
| Использование DLL библиотек в GML В тех случаях когда функциональные возможности GML - не достаточны для Ваших грандиозных планов, Вы можете реально расширить данные возможности, используя плагины. Плагины должны быть в форме DLL файла (Динамически загружаемых библиотек). В таком DLL файле Вы можете определить функции. Такие функции могут быть написаны на любом языке программирования, которые поддерживают создание DLL (например. Delphi, Visual C++, Visual Basic, и т.д.) Для этого Вам необходимо как минимум знать один из таких языков и иметь навык программирования. Плагины с функциями должны иметь специфический формат. Они могут содержать ноль (zero), один или два параметра, каждый из которых может быть вещественным числом (double in C) или строкой с нулевым символом в конце. Они должны возвращать либо вещественную строку, либо строку с нулевым символом в конце. В Delphi Вы создаете DLL сначала выбрав, New из меню File и затем выбрав DLL. Далее приводится пример DLL, который Вы можете использовать с Game Maker, написанный в Delphi. (Обратите внимание, что это - Delphi код, а не GML код)! library MyDLL; uses SysUtils, Classes; function MyMin(x,y:real):real; cdecl; begin if xend; 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. Этот файл должен быть помещен в каталог с Вашей игрой. (Или иное место, где окна могут найти его.) Чтобы использовать данный DLL в Game Maker, сначала Вы должны определить внешние функции, которые хотите использовать и какой тип параметров они берут. Для этого в GML имеются следующие функции: external_define0(dll,name,restype)- Определяет внешнюю функцию без параметров. dll - название dll файла. name - название функций. И restype - тип результата. Для этого используйте либо ty_real, либо ty_string. external_define1(dll,name,arg1type,restype)- Определяет внешнюю функцию с одним параметром. Так же точно как и в функции приведенной выше, только теперь rg1type - тип первого параметра. Для него также используйте либо ty_real либо ty_string. external_define2(dll,name,arg1type,arg2type,restype)- Определяет внешнюю функцию с двумя параметрами. external_define3(dll,name,arg1type,arg2type,arg3type,restype)- Определяет внешнюю функцию с тремя параметрами. external_define4(dll,name,arg1type,arg2type,arg3type,arg4type,restype)- Определяет внешнюю функцию с четырьмя параметрами. external_define5(dll,name,restype)- Определяет внешнюю функцию с пятью реальными параметрами. (Строки не могут содержать более 4 параметров). external_define6(dll,name,restype)- Определяет внешнюю функцию с шестью реальными параметрами. (Строки не могут содержать более 4 параметров). external_define7(dll,name,restype)- Определяет внешнюю функцию с семью реальными параметрами. (Строки не могут содержать более 4 параметров). external_define8(dll,name,restype)- Определяет внешнюю функцию с восьмью реальными параметрами. (Строки не могут содержать более 4 параметров). Каждая из этих функций возвращает идентификатор внешней функции, которая должна использоваться для его вызова. Так в вышеприведенном примере, в начале игры Вы использовали бы следующий GML код: global.mmm = external_define2('MYOWN.DLL','MyMin',ty_real,ty_real,ty_real); global.ddd = external_define1('MYOWN.DLL',DoubleString,ty_string,ty_string); Теперь всякий раз, когда Вам нужно вызывать функции, используйте пример. aaa = external_call2(global.mmm,x,y); sss = external_call1(global.ddd,'Hello'); Далее приводятся вызывающие функции: external_call0(id)- Вызывает внешнюю функцию с данным идентификатором (id), который не имеет никаких параметров. external_call1(id,arg1)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет один параметр. external_call2(id,arg1,arg2)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет два параметра. external_call3(id,arg1,arg2,arg3)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет три параметра. external_call4(id,arg1,arg2,arg3,arg4)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет четыре параметра. external_call5(id,arg1,arg2,arg3,arg4,arg5)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет пять параметров. external_call6(id,arg1,arg2,arg3,arg4,arg5,arg6)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет шесть параметров. external_call7(id,arg1,arg2,arg3,arg4,arg5,arg6,arg7)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет семь параметров. external_call8(id,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет восемь параметров. Вы возможно не знаете, как пишется функция в DLL, которая что-нибудь делает в игре. Например, Вы захотели создать DLL, которая добавляет образцы объектов в Вашу игру. Самый простой способ состоит в том, чтобы позволить своей функции в DLL возвращать строку, которая содержит часть кода GML. Эта строка, содержащая часть GML, может быть выполнена, используя функцию GML execute_string(str) - Выполняет фрагмент кода в строке str. Дополнительно Вы можете позволить DLL создать файл со сценарием, который может быть выполнен (эта функция также может использоваться, чтобы позже изменить поведение игры). execute_file(fname) - Выполняет фрагмент кода в файле. Теперь Вы можете вызывать внешнюю функцию и затем выполнить результирующую строку, например следующим образом: ccc = external_call2(global.mmm,x,y); execute_string(ccc); В некоторых, редких, случаях твоей DLL может понадобиться знать о настройках основного графического окна игры. Это можно сделать с использованием следующей функции и тогда может быть использована DLL: window_handle()- Возвращает настройки окна для основного экрана. Обратите внимание, что DLL не может использоваться в безопасном (secure) режиме. Использование внешних DLL - чрезвычайно мощная функция. Но пожалуйста используй их, только если Вы действительно уверены в том что делаете.
Если надо помочь с Game Maker или Small Basic) - обращайтесь!
Сообщение отредактировал Dragon6 - Среда, 14 Апреля 2010, 12:37 |
|
| |