Pues tengo esta duda ???
Cuando se utiliza el GML, se recurre al botón de Exacute code para ir poniendo funciones y código. Pero no sé cuando se deben dejar de utilizar los event por defecto y hacerlo todo en código. Me explico...
Estoy haciendo un laberinto. Los movimientos del personaje están en el event STEP. Osea, todos ellos (left, right, up y down). No he recurrido a los event keyboard.
En la colisión con los muros si he recurrido al event collision y he puesto un execute code de:
motion_set(360,0)
La duda me surge ahí...
¿No debería haberlo hecho todo por código? Osea, eliminar el event collision y hacer todo eso en un step. De no ser así ¿Para que están entonces las funciones collision? Por que con un motion_set lo he arreglado todo.
La gente que habitualmente programa juegos con GML ¿Que eventos utiliza?
Es que tengo un lío mental de que códigos podemos poner en los eventos step y cuales no.
¿Recomendáis no utilizar ningún D&D y en cambio sí los event predefinidos?
Es que he notado que un simple botón de D&D no solo lleva una línea de código, si no que puede llevar varias. Y claro, es en esa construcción de líneas donde yo fallo. Y eso, no lo aprendo solo mirando el manual y la explicación de sus funciones. Si no, que es la combinación de estas lo que dan un simple botón de D&D ¿No?
Cita de: Jangse en Diciembre 27, 2013, 08:37:54 PM
¿No debería haberlo hecho todo por código? Osea, eliminar el event collision y hacer todo eso en un step. De no ser así ¿Para que están entonces las funciones collision?
Depende del programador. El Manual no dice que debas usar sólo GML, o sólo D&D. Tampoco he leído algún tutorial donde indiquen que sea ilegal usar una combinación de ambos. Usa lo que tenga mayor lógica o sea más intuitivo para ti. Las funciones colisión sirven para muchas cosas. Si no las has usado, quizá sea porque no las has necesitado, pero el que las haya usado, sabrá que son muy útiles.
Cita de: Jangse en Diciembre 27, 2013, 08:37:54 PM
La gente que habitualmente programa juegos con GML ¿Que eventos utiliza?
Eso es como preguntar, qué color debe ser mi color favorito, basado en los colores favoritos de otros. Mucha gente prefiere usar los eventos de teclado D&D, porque eso libera código del evento STEP, otros prefieren poner el chequeo de teclas en STEP porque desde el mismo bloque controlan todo sin tener que andar cambiando de eventos para cambiar el código. códigos. Otros usan Begin STep, Step y End Step para organizar mejor su código y que sea más fácil de leer. Otros prefieren usar todo en SCRIPTS y no usar EXECUTE CODE. ES al gusto de cada quien. En este caso, hay que tener en cuenta que por ejemplo, los eventos de teclado, alarma y mouse se ejecutan antes que STEP y que los eventos de colisión se ejecutan después que STEP y antes que END STEP.
A mi se me hace más claro por ejemplo, usar los eventos del ratón individuales en lugar de manejarlos en STEP, para disminuír la cantidad de líneas en STEP. Lo que sí no me gusta es usar acciones D&D en los eventos (cualquiera). Por ejemplo, para dañar enemigos con espadas, uso el evento COLLISION, pero dentro le meto puro GML
Podes hacerlo como quieras, mientras que funcione, entiendas y sea fácil de modificar está bien
A mi me gusta poner todo en el evento Step pero dividirlo en Scripts. Hace bastante que no uso GM, pero lo último que hice fue participar en la GIA, y en step tenía esto:
Mgbu_timer += 1
if (Mgbu_timer mod 5 = 0) scr_Mgbu_memoria_actualizar() // Actualizar memoria cada 5 steps
//Si hay poca vida y se esta sobre vidas agarrar
if (scr_Mgbu_poca_vida() && scr_Mgbu_sobre_objeto("Vida")) {
exito = scr_recoger_vida_piso()
if (exito = true) {
scr_Mgbu_memoria_borrar("Vida", x - 16, y - 16)
scr_dialogo("El agua oxigenada hace arder :(")
}
}
//Si se esta sobre armas agarrar
if (scr_Mgbu_sobre_objeto("Ametralladora") || scr_Mgbu_sobre_objeto("Pistola")) {
scr_Mgbu_agarrar_arma()
}
if (scr_ver_enemigos() = false) {//No hay enemigos cerca
// Que hacer cuando no hay nada que hacer
scr_Mgbu_recargar_arma() // Recargar para estar listo
scr_girar(7) // Girar para ver todo
scr_Mgbu_moverse_armas() // Ir hacia armas
if (scr_Mgbu_poca_vida()) scr_Mgbu_moverse_vida()
if (scr_get_camino() = 0) scr_Mgbu_moverse_aleatorio() // O si no hacia cualquier lado
}
else {
//Si hay enemigos cerca
if (scr_ver_enemigos() < 2 && !scr_Mgbu_muy_poca_vida()) scr_detener_camino() // Si es uno solo quedarse quieto (salvo que se vaya a buscar vida, si es asi, se mueve por el override de abajo)
else scr_dialogo("Veo una linda fiesta aca")
if (scr_Mgbu_poca_vida()) scr_Mgbu_moverse_vida()
if (scr_Mgbu_muy_poca_vida() && scr_get_camino() = 0) scr_Mgbu_moverse_aleatorio()
scr_Mgbu_apuntar() // Apuntar y disparar!
}
Como ves está todo en scripts, entonces está todo bien dividido por acciones. Obviamente solamente hago esto cuando sé que voy a escribir mucho en Step (ahora que me fijo tenía como 15 scripts de más o menos ese largo cada uno)
Cita de: Mgbu
A mi me gusta poner todo en el evento Step
Pero en algunos manuales, he leído, que no aconsejan poner muchas cosas en este evento. Comentan que ralentizan el juego ¿No...?
Si, pero no creo que la diferencia sea tan grande. Porque el evento Step se ejecuta 30 veces por segundo, al igual que 30 veces por segundo se chequean las colisiones de tus eventos de colisión, se chequean las teclas de tus eventos de teclado y demás. La única diferencia es que supuestamente es un poco más rápido usar los eventos, por ejemplo para chequear colisiones sería mejor poner un evento colisión que escribirlo en Step pero la diferencia creo que es mínima, me importa más la comodidad
Los comentarios para mí se deben a que es más fácil ralentizar el juego desde ahí, porque si no tenés cuidado podés equivocarte y hacer algo que ralentize el juego
Cita de: Mgbu en Enero 02, 2014, 03:28:32 PM
Los comentarios para mí se deben a que es más fácil ralentizar el juego desde ahí, porque si no tenés cuidado podés equivocarte y hacer algo que ralentize el juego
exacto , a eso me referia yo
igual no viene tan mal ahorrar unos fps para gastarlos en el reproductor de musica XD