Enero 22, 2014, 04:51:08 AM Ultima modificación: Enero 22, 2014, 05:35:20 PM por eams1986
Hola me gustaria preguntarles a todos cual es la mejor  manera  de aprender a programar Game maker lenguaje .
Que es lo primero...
Aprenderse los códigos de memoria o como.
Si lo aprendieron como...
O todo esto se va aprendiendo según va programando .
Gracias y espero sus comentarios .

Yo fui viendo tutoriales, que de primera me enseñaron a como hacer juegos basicos, solo utilizando drag and drop, luego empecé de poco a poco a entender GML, tambien fui acudiendo a mas tutoriales, ejemplos, los fui analizando, hasta saber utilizar varias funciones del game maker, como estoy estudiando informatica, la programacion se pasa siempre, y he adquirido mas practica a la hora de crear algoritmos... bueno, esa es la manera en que aprendi a utilizar el game maker :)
El ayer es un recuerdo, el mañana un pensamiento, es el ahora en donde existo y vivo para ser feliz :D


yo estoy empezando con cosas basicas, ya que soy pro en d&d pero noob en gml  XD
lo que ago es tomar mis juegos y trato de pasarlos a gml

Para comenzar a programar en GML (que el título dice GMS xD) te recomiendo primero aprender la sintaxis básica de un lenguaje "real", en mi caso empecé con PHP (que la sintaxis es la misma que GML a excepción de los índices que en GML empiezan de 1 y no de 0 como los lenguajes desentiendes de C). Luego comenzá con ejemplos y tutoriales, eso siempre ayuda.

Si amigo lo digo que GMS por que es allí donde utilizamos más el lenguaje . Pero gracias por contestar aparte me quedé nulo con su comentario .. no se que decir  hazlo más fácil por favor.

IROS dime cuál es la sintaxis de un lenguaje Real la verdad es que yo estoy nulo.

Bueno, desde GM3 se usa más GML que D&D, no simplemente en GMS xD.

A lo que me refiero es que tenes que saber como funcionan los condicionales, casos, bucles y definición de variables en un lenguaje real como es C o sus derivados para entender mejor lo que es GML, va eso es desde mi punto de vista ya que así aprendí yo (en mi caso aprendí mejor la sintaxis programando en PHP).

Acá te dejo unos ejemplos básicos en GML:

Condicional IF, ELSE, ELSE IF:

IF
[gml]if (variable1 == variable2) { //Si se cumple la comparación entre variables.
     //Se lleva a cabo esta acción
}[/gml]

ELSE
[gml]if (variable1 == variable2) { //Si se cumple la comparación entre variables.
     //Se lleva a cabo esta acción
} else { //Si no se llega a cumplir la comparación...
    //Se lleva a cabo esta otra acción.
}[/gml]

ELSE IF
[gml]if (variable1 == variable2) { //Si se cumple la comparación entre variables.
     //Se lleva a cabo esta acción.
} else if (variable1 < variable2) { //Si no se cumple el primer caso pero si esta comparación...
    //Se lleva a cabo esta acción.
} else { //Si no se llega a cumplir ninguno de los casos anteriores...
   //Se lleva a cabo esta otra acción.
}[/gml]

Es importante destacar que dentro de un if podes comprar con == (igual) != (distinto) < (mayor que) > (menor que) <= (mayor o igual que) >= (menor o igual que), pero también los if trabajan recibiendo datos booleanos, es decir que si una variable está en true la va a reconocer y se va a llevar a cabo la acción dentro de los corchetes que es el caso de usar las acciones de GM:

[gml]if (position_empty(32,32)) { //Si esa posición está libre nos va a devolver TRUE y se va a crear el objeto.
   instance_create(objCreate,32,32);
}[/gml]

Eso es en cuanto al uso básico del IF, también tenes que recordar que podes tener varios casos dentro de un IF y poder separarlos usando and (&&), or (||) o not (no se si GML lo tiene como not, pero podes usar un ! para negar todo).

Ahora vamos con los Switch, esta función es muy útil para diferenciar casos, por ejemplo, un uso muy común es trabajando con GML y 39Dll para saber que tipo de byte está uno recibiendo, acá te dejo un ejemplo con la sintaxis básica:

[GML]switch miVariable {
    case (1):
        //Hacer esto.
    break;
    case (2):
        //Hacer esto.
    break;
    case (3):
        //Hacer esto.
    break;
    default:
        //Hacer esto si no coinciden los valores.
    break;
}[/GML]

El switch toma la variable que se le asigna y la analiza, si el valor de la variable coincide con uno de los casos va directamente a ese caso, a diferencia del IF que recorre caso por caso hasta dar con el correcto. Cabe destacar que si no se encuentra el valor dentro del caso se puede usar default para se se ejecute esa acción.
Un punto importante a destacar es que el switch no tiene condicionales como ==, <,>, etc.

Ahora pasemos a los bucles, que básicamente lo que hacen es repetir una o más acciones X cantidad de veces.

Los que se usan son: While, Do While y For.

La diferencia entre el While y el Do While es que el último se ejecuta la acción antes de entrar en el bucle.

While:

[gml]var contar;
contar = 0;
while (contar < 10) {
    //Acción a realizar.
    contar += 1; //Con esto incrementamos el contador para no hacer un bucle infinito.
}[/gml]

Do While:

[gml]var contar;
contar = 0;
do {
    //Acción a realizar.
    contar += 1; //Con esto incrementamos el contador para no hacer un bucle infinito.
} while (contar < 10);[/gml]

Básicamente esa es la estructura del While y Do While, y como podes ver, en el segundo se va a ejecutar primero la acción y luego entrar en el bucle While.

También aclaro que el bucle While (en general, sea While o Do While) actúa con valores lógicos, es decir que podemos hacer un bucle mientras X variable esté en TRUE y después de X tiempo pasa a FALSE, entonces en ese cambio de estado se detendría el bucle.

Ahora pasemos al último que dijimos que es el bucle For, uno de los más usados.

El bucle for cuenta con 3 partes por así decir, la primera parte que se define la variable a usar, la segunda que compara el valor actual de la variable con el valor que deseamos alcanzar y la última parte es la de incremente o decremento del valor de la variable:

[gml]for (i=0;i<10;i+=1) {
    //Acción a realizar.
}[/gml]

Por lo general en los bucles For siempre se comienza desde cero, si se comienza desde uno y querés tener todos los valores tenes que usar i<=10. También aclaro que i+=1 se usa para incrementar el valor del bucle por casa pasada, podes usar un +=1 como un -=1 para el caso en que querrás lograr un decremento del valor de la variable. Otra cosa, puede ser 1 como 2 o 3, o simplemente el valor que uno quiera.

Ahora bien, si no queres que se cumplan todos los ciclos de bucle (ya sea en While o For) podes detenerlos en X ciclo mediante un condicional y el uso de break.

[gml]for (i=0;i<10;i+=1) {
    if (!instance_empty(x+i,y+i)) {
        break;
    }
}[/gml]

En el ejemplo dice que si la posición x+i e y+i (es decir el valor actual de la posición del objeto más el valor de i) no está libre, vamos a salir del bucle.

Eso es más que nada la sintaxis básica en todos los lenguajes, un poco aplicada a GML en algunos ejemplos.

Ahora vamos a pasar a definir las variables en GML.

Cabe destacar que existen 3 formas de definir variables:

Globales: Se ejecutan sobre todos los objetos.
Locales: Se ejecutan únicamente en el objeto que fueron definidas.
Privadas: Se ejecutan únicamente sobre el código donde fueron definidas (var).

Para definir una variable del tipo global creamos un code en el evento Create y ponemos así:

[gml]global.variableEntera = 123;
global.variableTexto = "asd";
global.variableCaracter = 'a';
global.variableLogica = true;[/gml]

Para las variables de tipo Local pasa lo mismo que con las Globales para crearlas, nada más que le sacamos el global.

[gml]variableEntera = 123;
variableTexto = "asd";
variableCaracter = 'a';
variableLogica = true;[/gml]

Ahora bien, para las variables privadas cambia la cosa ya que únicamente la podemos definir sin valores:

[gml]var variableEntera,variableTexto,VariableCaracter,VariableLogica;

variableEntera = 123;
variableTexto = "asd";
variableCaracter = 'a';
variableLogica = true;[/gml]

Estas variables se usan más que nada en pequeños códigos como en los Scripts o en las alarmas o lugares donde no sea de suma importancia recurrir a una variable global o local ya que únicamente la usaríamos en una sola parte del código y no en todo el código.

Bueno, eso es lo básico de GML, espero que te sirva :D