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!
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?
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.
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.
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.
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...? :-[