|
|
Usando DLLEstas funciones están solamente disponibles en la versión registrada del Game Maker.En casos donde las funciones de GML no son suficientes para tu satisfacción, puedes extender las posibilidades usando plug-ins. Un plug-in viene en forma de archivo DLL (Dynamic Link Library) En una DLL puedes definir funciones. Estas funciones pueden ser programadas en cualquier lenguaje que soporte la creación de DLL (como Delphi, C, C++, etc.). Necesitarás tener cierta habilidad de programación para hacer una. Pueden tener entre 0 y 11 argumentos. Pueden ser números reales (double en C) o un string terminado en '\0'. Para mas de 4 argumentos, solo pueden ser números reales. La función debe devolver un valor real, o un string terminado en '\0'. En delphi puedes crear una DLL eligiendo New del menú File menu y luego elegir DLL. Aquí un ejemplo de DLL que puedes usar con Game Maker escrita en Delphi. (Ten en cuenta que es código de Delphi no 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. Esta DLL define 2 funciones MyMin que toma 2 argumentos reales y devuelve el mínimo de los 2. Y DoubleString que dobla el string. Tenga en cuenta tener cuidado con como trata la memoria. management. Una vez que contstruyas la DLL en Delphi obtendrás un archivo llamado MyDLL.DLL. Este arcvhivo debe ponerse en el directorio donde se ejecuta el juego. O en cualquier otro lugar donde Windows pueda encontrarlo. Para usar la DLL en Game Maker primero debes especificar la función externa que desees usar con los argumentos que desees tomar. Para esto existen las siguientes funciones en GML:
external_define(dll,name,calltype,restype,argnumb,arg1type,arg2type, ...) Define una función externa. dll es el nombre de la dll. name es el nombre de la función. calltype es el modo de llamado usado. use dll_cdecl o dll_stdall restype es el tipo de dato devuelvo, use ty_real o ty_string. argnumb es la cantidad de argumentos que posee la función. Los demás argumentos son los tipos de datos usados para cada argumento en la función, use ty_real o ty_string Esta función retorna el id de la función externa, que debe ser usada para llamarla. Entonces, suponiendo el ejemplo de DLL mencionado anteriormente, podrías usar el siguiente código GML:
Ahora, cuando quieras llamar las funciones, usas la siguiente función:
external_call(id,arg1,arg2,...) Llama la función externa con el id dado, y con los argumentos dados. Debes pasar la correcta cantidad de argumentos y el correcto tipo de argumento (real o string). La función devuelve lo que devuelve la función de la DLL. Entonces, por ejemplo, podrías escribir:
Si no necesitas usar mas la DLL, deberías liberarla de la memoria:
external_free(dll) Libera de la memoria la DLL con el nombre dado. A veces puedes querer hacer una DLL que haga algo específico en el juego. Como hacer una DLL que agrega instancias u objetos en tu juego. La manera mas fácil sería hacer que la DLL retorne un string que contenga el código de GML para lograr esto. El string puede ser ejecutado usando la siguiente función:
execute_string(str) Ejecuta el código en el string str. Tamboén podrías hacer que la DLL cree un archivo con el script que debe ejecutar:
execute_file(fname) Ejecuta el código en el archivo. Ahora puedes llamar una función externa y ejecutar el string resultante, por ejemplo, así:
En algunos casos necesites saber el handle de los gráficos de la ventana. Esto se puede obtener usando la siguiente función, y pasarlo de dato a la DLL:
window_handle() Devuelve el handle de la ventana. Tenga en cuenta que las DLL no pueden ser usadas en modo seguro. Usar DLLs en un mecanismo muy poderoso. Pero por favor, solo úselo si sabe lo que está haciendo. |