Accueil | Personnaliser | Blog | Extras | Log In | Information
Manuel | D&D icons | GML Parser | Archives | Ville Iso
Username: Password:  
à propos | Caractéristiques | Directory | Bannières | Contacter

Création de jeux avec Game Maker
Création de jeux avec Game Maker

Utilisation de librairies DLL

Cette fonctionnalité n'est disponible que dans la version enregistrée de Game Maker.

Dans les cas où vous jugeriez que les fonctionnalités du GML ne seraient pas suffisantes, vous pouvez étendre ses possibilités en utilisant des plug-ins. Un plug-in se présente sous la forme d'un fichier DLL (Dynamic Link Library : Librairie à Lien Dynamique). Dans ce fichier DLL, vous pouvez adresser des fonctions. Les fonctions peuvent être programmées avec n'importe quel langage de programmation supportant la création de fichiers DLL (ex: Delphi, C, C++, etc.) Vous devrez cependant posséder un bon niveau de programmation pour créer des DLL. Les fonctions Plug-in doivent respecter un format spécifique. Elles peuvent avoir de 0 à 11 arguments, chacun de ceux-ci pouvant être un nombre réel (double en C) ou une chaîne terminée par un caractère null (s'il y a plus de 4 arguments, seuls les arguments de type réel sont supportés pour l'instant). Ces fonctions doivent retourner soit un réel ou encore une chaîne terminée par un caractère null.

Sous Delphi, vous créerez une DLL en choisissant en premier lieu l'article New du menu File puis vous sélectionnerez DLL. Voici un exemple de DLL que vous pourrez utiliser avec Game Maker écrit en Delphi (veuillez noter que ce code est en Delphi, pas en code 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.

Cette DLL définit deux fonctions: MyMin prenant deux arguments réels puis retourne le minimum de ces deux valeurs et DoubleString qui concaténe la même chaîne de caractères. Veuillez noter que vous devrez être particulièrement prudent en ce qui concerne la gestion de la mémoire. C'est pourquoi j'ai déclaré la chaîne résultat sous forme de variable globale. Veuillez remarquer également l'utilisation de la convention d'appel nommée cdecl. Vous pouvez utiliser soit les conventions d'appel cdecl ou stdcall. Une fois que vous avez créé la librairie DLL sous Delphi, vous obtiendrez le fichier de nom MyDLL.DLL. Ce fichier sera à placer ensuite dans le répertoire d'exécution de votre jeu (ou encore à tout autre endroit où Windows pourra le trouver).

Pour utiliser cette DLL dans Game Maker, vous devrez en premier lieu indiquer les fonctions externes que vous souhaitez employer et préciser quels types d'arguments elles devront accepter. A cet effet, il existe la fonction suivante en GML :

external_define(dll, name, calltype, restype, argnumb, arg1type, arg2type, ...) Définit une fonction externe. dll est le nom du fichier de la DLL. name est le nom des fonctions. calltype est la convention d'appel utilisée. Utilisez soit dll_cdecl ou dll_stdcall. restype est le type du résultat. Utilisez soit ty_real ou ty_string. argnumb est le nombre d'arguments (0-11). Ensuite, pour chacun des arguments, vous devrez indiquer le type. Utilisez soit ty_real ou ty_string. S'il y a plus de 4 arguments, tous devront être de type ty_real.

Cette fonction retourne l'id de la fonction externe, ID devant être utilisé pour appeler la fonction. Ainsi, dans l'exemple ci-dessous, au début du jeu, vous utiliserez le code GML suivant :

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

Maintenant, si vous souhaitez appeler les fonctions, vous utiliserez la fonction suivante :

external_call(id, arg1, arg2, ...) Appelle la fonction externe d'ID id avec les arguments indiqués. Il est nécessaire de fournir le nombre et le type corrects pour les arguments (réel ou chaîne). La fonction retourne le résultat de la fonction externe.

Par exemple, vous pourrez écrire :

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

Si vous n'avez plus besoin d'utiliser la DLL, il est préférable de la fermer.

external_free(dll) Libére la DLL de nom dll. Ceci est particulièrement indispensable si le jeu doit supprimer la DLL. Tant que la DLL n'est pas libérée, elle ne pourra pas être retirée. Il est conseillé de le faire à la fin de l'événement du jeu.

Vous vous demandez peut-être comment réaliser une fonction dans une DLL qui réalise quelque chose dans le jeu. Par exemple, vous pourrez vouloir créer une DLL qui ajoute des instances d'objets dans votre jeu. La façon la plus simple de procéder est de faire en sorte que la fonction DLL retourne une chaîne contenant du code GML. Cette chaîne contenant du code GML, pourra être exécutée à l'aide de la fonction GML suivante :

execute_string(str) Exécute du code GML contenu dans la chaîne str.

De plus, vous pouvez également faire en sorte que la DLL crée un fichier script qui pourra ensuite être exécuté (cette fonction peut aussi être utilisée pour modifier ultérieurement le comportement du jeu).

execute_file(fname) Exécute le code GML contenu dans le fichier de nom name.

Désormais, vous pouvez appeler une fonction externe puis exécuter la chaîne résultat de la manière suivante :

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

Dans de rares cas, votre DLL aura besoin de connaître le gestionnaire de la fenêtre graphique principale de votre jeu. Ceci peut être réalisé avec la fonction suivante puis le résultat sera transmis à la DLL :

window_handle() Retourne le gestionnaire de fenêtre de la fenêtre principale (window handle).

Veuillez noter que les DLLs ne peuvent pas être utilisées dans le mode sécurisé.

L'utilisation de fichiers DLLs externes est un mécanisme extrémement puissant. Mais attention : à n'utiliser cependant que si vous savez exactement ce que vous faites.

















<< Traduction française par Philippe Ragni - (2005) >>

Search Search


Alternative versions Alternative versions

You can also read this manual on one single long page (± 1.5 mb)

Also available in: Dutch English German

ZIP Download helpfile

Annonces Annonces

GameMaker Manual