Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Jangse en Enero 16, 2014, 09:09:33 PM

Título: Metodología en eventos y acciones.
Publicado por: Jangse en Enero 16, 2014, 09:09:33 PM
Me han surgido unas dudas...

Me gustaría saber cual es la metodología correcta para programar los eventos y acciones (GML) en GM. Por ejemplo, cuando ponemos el evento de colisión con el enemigo. Se puede poner event colisión en el enemigo contra nosotros. O bien, poner el event colisión en nuestro personaje pero que colisiona contra el enemigo. A la postre, es lo mismo ¿Pero cual es la forma correcta?

Otra duda, es, donde poner el control de vidas, puntos, energía ¿En el objeto personaje? ¿O crear otro objeto controlador? Por que hay gente que pone este control en el personaje. Pero luego tiene un lío de narices cuando cambia de room y tal (Como le paso a un servidor). Por eso, me gustaría saber si hay un patrón donde es mejor ubicar estas cosas.

Por que según lee uno, mucha gente pone el código en un step, otros en un draw o en un create. Y uno no sabe donde poner el suyo.

Saludos!
Título: Re:Metodología en eventos y acciones.
Publicado por: penumbra en Enero 16, 2014, 10:56:11 PM
Cita de: Jangse en Enero 16, 2014, 09:09:33 PM
Se puede poner event colisión en el enemigo contra nosotros. O bien, poner el event colisión en nuestro personaje pero que colisiona contra el enemigo. A la postre, es lo mismo ¿Pero cual es la forma correcta?

Si a la postre es lo mismo, ¿por qué una forma sería incorrecta y la otra no? Por ahí he leído que "Antes claridad que eficiencia", "La eficiencia prematura es una maldición".  No sé qué tan ciertas sean, pero imagina que en tu juego hay 100 enemigos diferentes. Aunque fuera menos eficiente, yo preferiría poner un evento de colisión en cada enemigo (vs el jugador) que cien eventos de colisión en el objeto jugador. Me parece que se aconseja poner el evento de colisión en el objeto del que haya menos instancias en la habitación, pero me imagino que la diferencia entre hacerlo de una u otra manera no se notaría en el 95% de computadoras que ejecutaran el juego. Ya sería cuestión de hacer pruebas.

Cita de: Jangse en Enero 16, 2014, 09:09:33 PM
Otra duda, es, donde poner el control de vidas, puntos, energía ¿En el objeto personaje? ¿O crear otro objeto controlador? Por que hay gente que pone este control en el personaje. Pero luego tiene un lío de narices cuando cambia de room y tal (Como le paso a un servidor). Por eso, me gustaría saber si hay un patrón donde es mejor ubicar estas cosas.

Si dices que tuviste problemas con variables al cambiar de habitación, el mero hecho de pasar el código del objeto jugador al objeto controlador (que es un objeto más) no resuelve el problema. La solución (bien sencilla) en este caso es que el objeto jugador sea persistente. De hecho un controlador que no sea persistente no le veo mucha utilidad.

Y sí hay un patrón de dónde ubicar las cosas, de hecho, hay dos patrones: Sentido común y preferencias personales. Nada está escrito en piedra sobre qué poner en un objeto controlador. Si consideras que una variable es más global que "privada", la pones en el controlador (si quieres). Sería muy feo que el manual te exigiera dónde poner tal variable.

Cita de: Jangse en Enero 16, 2014, 09:09:33 PM
Por que según lee uno, mucha gente pone el código en un step, otros en un draw o en un create. Y uno no sabe donde poner el suyo.

¿A qué código te refieres? Digo, hay mucho código, cada uno hace cosas distintas. Un código de colisiones no tiene mucha lógica meterlo en DRAW, aunque se puede. ¿Como qué código es el que no tienes claro dónde poner?
Título: Re:Metodología en eventos y acciones.
Publicado por: klys en Enero 16, 2014, 11:35:34 PM
Es notable que las dudas que tienes es porque no has probado todavia.

Te recomiendo que pruebes y que tu mismo te des cuenta que es lo mejor y como es mejor hacerlo.

Muchos te diran sus opiniones pero al final el programador se dara cuenta de cual es la mejor manera.

Se tu propio cientifico, experimenta, observa, erra, es muy importante errar, nunca te frustes porque errar es necesario para llegar a la perfeccion.
Título: Re:Metodología en eventos y acciones.
Publicado por: Jangse en Enero 17, 2014, 06:24:17 PM
Cita de: penumbra
¿A qué código te refieres? Digo, hay mucho código, cada uno hace cosas distintas. Un código de colisiones no tiene mucha lógica meterlo en DRAW, aunque se puede. ¿Como qué código es el que no tienes claro dónde poner?

Gracias por tus consejos. Sobre lo que dices en tu cita, es sobre los eventos. Por ejemplo, en el event step he puesto todos los movimientos de mi personaje. Osea, que se alineé con el grid y los cuatro movimientos básicos. Pero esto mismo lo podría haber puesto en los eventos de teclas. A eso me refiero, que hubiera una guía que clarificara que cosas se pueden poner y no poner en los events de forma genérica.
Título: Re:Metodología en eventos y acciones.
Publicado por: mijailbellum en Enero 17, 2014, 08:11:58 PM
Por ejemplo eso de poner los movimientos en "Step" si que recomiendan no hacerlo, porque dicho evento se ejecuta en cada "paso" del juego y es un gasto innecesario de uso del procesador, yo creo también que deberías hacer caso a lo que te han dicho no te preocupes de eso ahora mismo y ve probando, tú mismo te darás cuenta de lo que es mejor o peor a la hora de programar.
Título: Re:Metodología en eventos y acciones.
Publicado por: Jangse en Enero 17, 2014, 09:17:27 PM
Cita de: mijailbellum en Enero 17, 2014, 08:11:58 PM
Por ejemplo eso de poner los movimientos en "Step" si que recomiendan no hacerlo, porque dicho evento se ejecuta en cada "paso" del juego y es un gasto innecesario de uso del procesador, yo creo también que deberías hacer caso a lo que te han dicho no te preocupes de eso ahora mismo y ve probando, tú mismo te darás cuenta de lo que es mejor o peor a la hora de programar.

Pues mira...me viene bien tu ejemplo:

He pasado todo el código que tenía en el evento Step (los cuatro movimientos direcciones) y ahora al dividirlo cada uno de ellos en cada evento Keyboard, ya no funciona.

Este es el código que antes me funcionaba en el evento Step:

if place_snapped(32,32) then
    speed = 0;

if place_snapped(32,32) then
    begin
        if keyboard_check(vk_left) then
            begin
                sprite_index = spr_heroe_left
                direction = 180;
                speed = 4;
            end;
    end;
   
if place_snapped(32,32) then
    begin
        if keyboard_check(vk_right) then
            begin
                sprite_index = spr_heroe_right
                direction = 0;
                speed = 4;
            end;
    end;

if place_snapped(32,32) then
    begin
        if keyboard_check(vk_up) then
            begin
                sprite_index = spr_heroe_up
                direction = 90;
                speed = 4;
            end;
    end;
   
if place_snapped(32,32) then
    begin
        if keyboard_check(vk_down) then
            begin
                sprite_index = spr_heroe_down
                direction = 270;
                speed = 4;
            end;
    end;




Al dividir este código entre cuatro (cada dirección del personaje en su evento Keyboard) ya no funciona. Bueno...funciona pero mal. Osea, que el personaje o no se para o bien no se mueve. Cuando estaba en el evento Step se movía al pulsar la tecla y se paraba al alinearse con el grid.

Y ahora en el evento Keyboard left pongo este código (pero no funciona bien):

if place_snapped(32,32) then
    begin
        sprite_index := spr_heroe_left;
        direction := 180;
        speed := 4;
    end;
     


¿Alguna idea...?  :-[