Agosto 30, 2013, 07:05:02 PM Ultima modificación: Agosto 30, 2013, 07:23:33 PM por Jangse
Aunque parezca increíble, aún le doy vueltas al asunto. La mayoría me habéis recomendado empezar, ya desde el principio, creando scripts (Y olvidar el D&D). Pero casi todos los ejemplos que encuentro por la red son de D&D. Llega un momento que puedo utilizar algunos ejemplos de código cortos, pero luego ya no se por donde seguir.

Lástima de dos libros que he visto, sobre Game Maker, que no han sido editados en nuestra lengua. Por que en ellos esta todo muy claro y con ejemplos de todo.

Me estoy desviando...la pregunta:

Los que programáis con scripts ¿Lo hacéis poniendo trozos de código corto en cada evento? ¿O también descartáis los eventos y lo programáis todo? Osea, eventos y acciones.

Lo que yo hago es seleccionar el evento (Create, Destroy, Step, etc...) y luego seleccionar la pestalla [Control] y el D&D de Execute code ¿Es correcto?

Para liarme aún mas leo esto:

Añadir acciones de código es lo mismo que escribirlos como scripts, con algunas diferencias, como que en las acciones no puedes usar argumentos. Las acciones de código, ni tienen nombre ni pueden usar argumentos.

¿A que se refiere con no poder utilizar argumentos ni nombres?

Gracias!

bueno, para empezar xD
gracias al cielo CGM tiene un manual en español al cual se puede acceder desde la portada del sitio :DD
es uno de los motivos por los cuales deje de hacer preguntas, si te fijas, todo esta ahí.

ahora sí

los scripts son fragmentos de código que se encuentran externos a los objetos. Pero si pueden ser llamados por objetos
algo característico de un script es que tiene argumentos
los argumentos son cosas que varían en dentro de su código, a partir de las llamadas que se les hacen
(sí, suena a chino pero en realidad es muy fácil)

ej de un script:
el nombre del script va a ser scr_velytecla
le puedes poner el nombre que quieres

como dijiste que no sabias mucho de gml (lenguaje de programación de game maker)
pondré comentarios junto a cada linea

[gml]
//argument0 una tecla
//argument1 un numero
if keyboard_check(argument0) //si apretás la tecla argument0
{x+=argument1} //te moves en argument1 veces en el eje de las x
[/gml]

como se uso esto desde un objeto?
realizando una llamada :)
escribís, el nombre del script
y entre paréntesis la candidad de argumentos (argument) que usa

en este caso sería:
[gml]scr_velytecla(argument0,argument1)[/gml]
dando a argument0 y argument1 valores que hagan funcionar el código, ya que los valores que le demos

ejemplo para el ejemplo:
[gml]scr_velytecla(vk_down,3)// argument0 es la tecla abajo, argument1 es igual a 3[/gml]
lo que significa que el script va a quedar así

[gml]
if keyboard_check(vk_down)
{x+=3}
[/gml]

cualquier duda, estoy acá xD

#2 Agosto 30, 2013, 08:37:38 PM Ultima modificación: Agosto 30, 2013, 09:37:20 PM por Jangse
Cita de: pikamaker en Agosto 30, 2013, 08:14:27 PM
bueno, para empezar xD
gracias al cielo CGM tiene un manual en español al cual se puede acceder desde la portada del sitio :DD
es uno de los motivos por los cuales deje de hacer preguntas, si te fijas, todo esta ahí.


Muchas gracias por la ayuda. Aunque en esta cita no te doy la razón. No creo que en ese manual este todo (Todo esto referido a la ayuda oficial). Es mas, la sección del GML la encuentro muy pobre. Y con pocos ejemplos de aplicados a un juego. Algo importantisimo. Esta claro, que habrá gente que lo pille todo a la primera. Pero sin ejemplos es mas complicado. Eso sin contar la gente que ya dominará otros lenguajes y el GML será coser y cantar para ellos.

Lo suyo es que se hiciera un mega libro de GML y aplicado a un video juego. Entonces, todo estaría mas claro. Me parece muy pobre la información que hay sobre Game Maker en castellano. Y si no fuera gracias a esta comunidad, lo tendríamos claro.

Y siempre digo lo mismo, si una compañía quiere llegar mas mercados, no debe obligar al cliente a aprender la lengua de su producto.

¿Que pasaria si los creadores de Game Maker fueran chinos y lo vendieran en esa lengua? No me refiero la interface. Si no, mas bien, sus tutoriales y documentación mas extensa.

#3 Agosto 30, 2013, 11:26:02 PM Ultima modificación: Agosto 30, 2013, 11:27:55 PM por penumbra
Cita de: Jangse en Agosto 30, 2013, 08:37:38 PM
¿Que pasaria si los creadores de Game Maker fueran chinos y lo vendieran en esa lengua? No me refiero la interface. Si no, mas bien, sus tutoriales y documentación mas extensa.

No serían tan tontos para lanzarlo sólamente en chino. Lo lanzarían en inglés sí o sí. Ejemplo: El autor de GM es holandés y no lanzó el programa en holandés. Es suficiente lanzarlo en inglés para que llegue a cualquier parte.

Cita de: pikamaker en Agosto 30, 2013, 08:14:27 PM
los argumentos son cosas que varían en dentro de su código, a partir de las llamadas que se les hacen

Bueno, tampoco creo que esa "definición" venga en algún manual de GM, comenzando porque eso no encaja con la definición de argumento

Los argumentos son información que le pasas a un script para que el script la procese de detrminada forma.

Por ejemplo,  una multiplicación de dos números. Los argumentos que le pasarías al script son los dos factores de la multiplicación:

El código con el que llamas al script se vería así (en el evento step, por ejemplo)
script_multiplicacion(4, 9)

Ahí tenemos un script al que le estás pasando dos argumentos, el cuatro es el argument0 y el 9 es el argument1. A un script le puedes pasar hasta 16 argumentos. Las palabras clave argument0, argument1, etc se usan DENTRO del script, nunca al llamar al script.

Internamente, el código del script se vería así:

var resultado                                           //declaras una variable local al script
resultado = (argument0 * argument1)   // procesas los argumentos
return resultado;                                     // esto es opcional, pero muy útil a veces


Esas tres líneas son tu script, como ves, puedes pasarle cualquier número como argumento y el script hará la multiplicación. Una vez que el script termina de procesar la información, algo que no hace es automaticamente devolver ese resultado. Por eso usé una variable local que guarda el resultado. Usando la instrucción return, el script devuelve el valor de la variable resultado

por ejemplo, suponiendo que tienes dos variables v1 y v2 que cambian sus valores periódicamente

if (script_multiplicacion(v1, v2) == 32 )
{
     //código a ejecutar cuando el resultado de la multiplicación es igual a 32
}

NOTA: Dentro del script, sólo puedes usar una vez la instrucción return. Si la usas más veces, sólo la primera vez es ejecutada. Esto es así porque la instrucción return provoca la finalización del script

#4 Agosto 31, 2013, 02:24:12 AM Ultima modificación: Agosto 31, 2013, 02:44:47 AM por Karasuman
Hola Jangse, aquí te adjunto un archivo .rar que contiene como se escriben en gml las funciones Drag&Drop que trae game maker(6 y 7) espero que te sirva.

Con respecto a lo de los script, yo los utilizo cuando debo utilizar ese código en varios eventos dentro de un objeto, para optimizar el tamaño del .exe que genera el game maker y para no tener código repetido dentro de un objeto.

Ejemplo: digamos que tengo que utilizar un código que tiene 30 lineas, y debo usarlo en tres eventos.
Si lo uso en un script (30 lineas) y lo llamo 1 vez en los tres eventos(al llamarlo solo usa una linea,+3 lineas)
Tenemos :30 lineas del script, y 3 lineas de las llamadas, 33 lineas en total;

Si uso el código de 30 lineas directamente(sin script), dentro de los 3 eventos, tendríamos 90 lineas.

Si te fijas es mucha la diferencia 33 lineas VS 90.

En cuanto al D&D, los script puedes llamarlos tanto con la función D&D (control) como también con la que dice execute script, yo uso mas la de control, ya que me permite ordenar mejor el código y no me ocupa tanto espacio en la pantalla, es cosa de gustos.

Cita de: Karasuman en Agosto 31, 2013, 02:24:12 AM
Hola Jangse, aquí te adjunto un archivo .rar que contiene como se escriben en gml las funciones Drag&Drop que trae game maker(6 y 7) espero que te sirva.


Gracias por el archivo. En todo caso, tengo un programa (que todos conoceréis) que transforma los D&D a GML.

Entonces...según entiendo:

Para crear un programa en GML (extenso) se ha de hacer en el árbol de recursos. Osea, donde están las carpetas que definen sprites, objetos, rooms, etc...

Y las piezas de código se han de usar seleccionando un evento y luego el D&D de Execute Code. En este Execute Code, no se pueden definir variables ni utilizar argumentos. Lo único que se puede hacer es ejecutar las funciones internas predefinidas por Game Maker ¿No? Si queremos usar las nuestras propias hemos de hacer llamadas a los scripts creados en el árbol de recursos. No se si es así. Por que me lío mas que la pata de un romano.


Cita de: Jangse en Agosto 31, 2013, 10:33:35 AM
Gracias por el archivo. En todo caso, tengo un programa (que todos conoceréis) que transforma los D&D a GML.

Entonces...según entiendo:

Para crear un programa en GML (extenso) se ha de hacer en el árbol de recursos. Osea, donde están las carpetas que definen sprites, objetos, rooms, etc...

Y las piezas de código se han de usar seleccionando un evento y luego el D&D de Execute Code. En este Execute Code, no se pueden definir variables ni utilizar argumentos. Lo único que se puede hacer es ejecutar las funciones internas predefinidas por Game Maker ¿No? Si queremos usar las nuestras propias hemos de hacer llamadas a los scripts creados en el árbol de recursos. No se si es así. Por que me lío mas que la pata de un romano.
Básicamente. Aunque sí se pueden definir variables en códigos (en el evento create) y con la instrucción "var" se pueden definir variables temporales para cualquier código o script.

A ver si me voy aclarando...

Quiero crear una gravedad simple que afecte al personaje principal y un enemigo. Entonces, creo un script en el árbol de recursos. Por ejemplo:

if place_free (x,y+1)
{gravity = argument0}
else
{gravity = 0}
if vspeed > argument1
{vspeed = argument1}

Salvo este script como gravedad. Osea, no debo poner gravedad().

Me voy a los eventos del personaje y en step selecciono el D&D de Execute Script (No Execute Code). Y selecciono en la ventana que se abre el script gravedad. Luego ¿Se debe rellenar las casillas que pone argument0, argument1, argument2, etc...?

¿O en el script creado por nosotros podemos eliminar el argument0 y poner 270 (Dirección hacia abajo?

Me gustaría ver un juego simple de como hacer llamadas a los scripts del árbol de recursos y luego como se seleccionan dentro de los eventos. 

Es una lástima que la mayoría que se ve por la red, son ejemplos de D&D. Ya que uno imita lo que ve, pero al menos yo, no me entero de nada.

Cita de: Jangse en Septiembre 01, 2013, 03:42:04 PM
Salvo este script como gravedad. Osea, no debo poner gravedad().

Me voy a los eventos del personaje y en step selecciono el D&D de Execute Script (No Execute Code). Y selecciono en la ventana que se abre el script gravedad. Luego ¿Se debe rellenar las casillas que pone argument0, argument1, argument2, etc...?
Lo guardas sin paréntesis. Rellenas los argumentos que uses en el script (en esté caso el argumento 0 y argument 1). Yo prefiero siempre ejecutar los scripts usando la accion de execute code y luego poniendo dentro del código "Gravedad(270, 12)".

Cita de: Jangse en Septiembre 01, 2013, 03:42:04 PM
¿O en el script creado por nosotros podemos eliminar el argument0 y poner 270 (Dirección hacia abajo?

Me gustaría ver un juego simple de como hacer llamadas a los scripts del árbol de recursos y luego como se seleccionan dentro de los eventos.

Sí quieres que la gravedad sea personalizable, el script tendría que ser mas o menos así. Aunque si la gravedad siempre va ir en direccion 270, no es necesario. Cambias todos los argument0 por 270.
[gml]if place_free (x+lengthdir_x(argument0),y+lengthdir_y(-argument1))
{gravity = argument0}
else
{gravity = 0}
if vspeed > argument1
{vspeed = argument1}[/gml]
Por cierto, quizá para acciones cortas o que no vayas a repetir, no necesites hacer scripts, después se vuelven enredosos y es una poquitin más lento (in-notable solo en bucles larguísimos) llamar aun script que usar la accion "execute code".