Пятница, 27 Декабря 2024, 03:32

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Урок по Game Maker'у.
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
SpihexДата: Среда, 14 Апреля 2010, 12:48 | Сообщение # 2
Моргающий Гемо-Брат
Сейчас нет на сайте
Поставил бы я Вам плюсик, если б эта работа была Вашей.
PsychoДата: Среда, 14 Апреля 2010, 12:51 | Сообщение # 3
Психоламер
Сейчас нет на сайте
Вообще-то это есть в русскоязычной справке wink
Dragon6Дата: Среда, 14 Апреля 2010, 12:52 | Сообщение # 4
Игродел-воитель
Сейчас нет на сайте
Quote (Spihex)
Поставил бы я Вам плюсик, если б эта работа была Вашей.

Да к сожелению эта работа не моя...Просто я спешил и решил просто скопировать текст с htm файла biggrin


Если надо помочь с Game Maker или Small Basic) - обращайтесь!
SlavyanOOsДата: Среда, 14 Апреля 2010, 12:54 | Сообщение # 5
Problems, developer?
Сейчас нет на сайте
Dragon6, смысл писать урок тогда?
Dragon6Дата: Среда, 14 Апреля 2010, 12:57 | Сообщение # 6
Игродел-воитель
Сейчас нет на сайте
Quote (SlavyanOOs)
Dragon6, смысл писать урок тогда?

Просто подумал чтоб пользователи сайта GcUp которые не знают как пользоватся dll файлами(я сам до тех пор пока не скачал этот htm файл не знал как пользоватся dll файлами biggrin ) и не знают где можно найти эту информацию научились ими пользоватся...


Если надо помочь с Game Maker или Small Basic) - обращайтесь!
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг