Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.
Conectarse

Recuperar mi contraseña

Temas importantes
----------------------------------------
Páginas con recursos RPG Maker
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Afiliados
Estadísticas
Tenemos 4070 miembros registrados.
El último usuario registrado es Rossainz.

Nuestros miembros han publicado un total de 84128 mensajes en 11983 argumentos.

Engines y jugabilidad, un pequeño vistazo a esta empanada mental

Ver el tema anterior Ver el tema siguiente Ir abajo

Engines y jugabilidad, un pequeño vistazo a esta empanada mental

Mensaje por silvanash el 2013-05-05, 02:27

Mucha gente se queja de que los engines que hace crean una cantidad exagerada de lag, o de que son ineficientes. No pretendo quitar ese lag ni hacer milagros, pero creo que con mi experiencia puedo mejorar un poco el rendimiento final del juego.

Para empezar, el gran fallo de los enginers de ahora es pensar que todo el mundo tiene una máquina con prestaciones iguales o superiores a la suya propia. Vale, es cierto, la gran mayoría de la gente tendrá un ordenador que esté en la media, pero hay otros cuyos recursos económicos son más ajustados, por lo que usan un cacharro de cinco años que se sigue encendiendo por milagros de la microelectrónica (sí, hablo del tío silva).

En algunos casos, los enginers tienen una máquina demasiado potente, y sus engines producen caídas del rendimiento evidentes incluso en máquinas que están en la media actual.

Vamos a ver qué podemos hacer para optimizar nuestros engines:

1 - Encadenar las excepciones. Esto es ya una recomendación clásica. Como todo enginer debería saber, el Maker ignorará todas las excepciones si se cumple la condición previa, ahorrando muchos cálculos por el camino. El sacrificio lo tiene que hacer el enginer a la hora de procesar esto, ya que le obliga a reordenar el engine y asegurarse de que no se deja excepciones fuera, pero es un sacrificio que debe hacer. Un enginer debe pensar en la máquina que ejecuta su engine, no en el jugador.

2 - Poner menos eventos en mapa. En una de las Biblias de Blizzard (sí, ese Blizzard) se explica claramente por qué los eventos de mapa dan lag, incluso cuando no tienen chara asociado o comandos dentro. Es el simple update del mapa. No voy a meterme en la explicación ahora porque no la recuerdo, pero viene a ser eso. Muchos de los famosos scripts antilag en realidad lo que hacen es dejar de updatear los eventos que se quedan fuera de la pantalla.

3 - Evitar procesos paralelos tanto como sea posible. Ésta fue una dura lección para mí. Hace un tiempo tenía un ordenador de sobremesa con más potencia que la reliquia que estoy usando ahora, y, obviamente, era un novato con una herramienta demasiado poderosa. El caso es que hice unas barras de vida. Nada del otro mundo, excepto una cosa: el update de las barras era un proceso paralelo continuo. Las barras de vida se estaban actualizando cada frame, hiciera falta o no. En esa máquina no noté el lag, pero al probar en el portátil que tengo ahora, borré el proyecto ahí mismo. La lección es que las barras de vida sólo deberían actualizarse cuando realmente cambie su valor. Es decir, si hieren al personaje, se llama a un evento común que actualice la barra de vida. Si se cura, se llama a evento común.

Las tres recomendaciones anteriores vienen a resumirse en lo que llamo "manipular correctamente el flujo de datos". ¿Qué es esta cosa tan rimbombante que quedaría perfecta como título de tesis de ingeniería hidráulica? Todo engine que no sea manipulación gráfica consiste esencialmente en un conjunto de operaciones para mostrar un resultado después. Los sistemas de batalla personalizados no son más que lecturas de coordenadas y cálculo de daños. Las barras de vida consisten en cálculos para mostrar una imagen. Y así con todo.

El flujo de datos hace referencia a la entrada y salida de información dentro de cada bloque del engine. Podemos dividir el engine en tantos bloques como queramos, y suele ser mejor dividirlos en varios bloques pequeños. Tampoco es necesario separarlo todo en bloques, pero resulta más cómodo controlar el flujo de datos con bloques pequeños y aislados. Dentro de cada uno de los bloques entra una cierta información (las coordenadas de los eventos, la vitalidad del personaje, lo que sea), se opera con esa información, y luego se emite otra información al siguiente bloque. Aquí entra otro detalle importante en la eficiencia de los engines: la lista. La lista de interruptores y variables que tenga el juego se carga íntegramente cada vez que se inicia el juego, y se queda en la RAM hasta que se cierre. Mucha gente tiende a usar grandes cantidades de variables e interruptores sólo para unos cálculos aislados que no volverán a repetirse en ningún otro engine. Es decir, reservan una gran cantidad de memoria para unos cálculos aislados. En lugar de eso, un engine bien planificado y con los bloques bien estructurados puede, simplemente, usar cinco variables sin valores fijos para ir tomando valores de otras partes y operar con ellos. En lugar de reservar una variable para almacenar constantemente el ataque del personaje podemos usar una variable temporal para tomarlo cuando realmente necesitemos ese valor. Dado que todos los bloques son independientes entre sí, es posible usar esas cinco variables sin miedo porque la respuesta se emite guardada en otra variable. Sólo habría que tener cuidado de evitar que hubiera un proceso paralelo usando esas variables al mismo tiempo.

Y ahora otra cuestión importante: ¿es realmente necesario que hagamos ese engine en el juego? Soy de la gente que peca de hacer las cosas sólo por hacerlas, sin un objetivo claro. De mis nueve proyectos, cinco empezaron siendo engines que quise probar, y luego les escribí una historia por encima. Viéndolo así no hay ningún problema, porque toda la jugabilidad de esos proyectos viene de los engines que les dieron base. El problema viene cuando ya hay un proyecto y se le añade un engine extremadamente complejo que no aporta nada a la jugabilidad. En esos casos, es mejor omitir directamente todo el engine. Cosas como hacer un minijuego para craftear las pociones acabarán cansando al jugador, por muy buen engine que pensemos que pueda ser. Otras cosas, como minijuegos que sólo aparecerán una vez en el juego, también se pueden omitir si no son esenciales para la trama. A fin de cuentas, esos minijuegos están ocupando un espacio de la RAM en forma de variables, interruptores y eventos.

Y con esto acaba este tocho-post.
avatar
silvanash
Aventurero
Aventurero

0/3

Créditos 1572

Gracias : 220

Volver arriba Ir abajo

Re: Engines y jugabilidad, un pequeño vistazo a esta empanada mental

Mensaje por DS el 2013-05-05, 02:35

me gusta como escribes, se hace interesante.
avatar
DS
Iniciado
Iniciado

0/3

Créditos 8

Gracias : 2

Volver arriba Ir abajo

Re: Engines y jugabilidad, un pequeño vistazo a esta empanada mental

Mensaje por orochii el 2013-05-05, 03:38

Pues sí, como dices, un juego casi se puede dividir en dos partes. Un conjunto de datos recolectados, como botones presionados o valores numéricos y tal. Y una respuesta a esos valores. La respuesta es en un 75% digamos, visual xD.

Para llegar a esa respuesta se hace algún tipo de procesado de esos datos. Las coordenadas de un personaje en pantalla, por ejemplo, denotan dónde se pondrá su imagen. El presionar un botón activará una función extra, que calculará el daño de un golpe de acuerdo a más datos (ataque, defensa, etc). Todo se reduce a una cuestión de acción-reacción.

Me gustó el tema xD,
Orochii Zouveleki
avatar
orochii
Caballero Shiro
Caballero Shiro

0/3

Créditos 6360

Gracias : 325

http://ragnarokrproject.com/

Volver arriba Ir abajo

Re: Engines y jugabilidad, un pequeño vistazo a esta empanada mental

Mensaje por yoenmii el 2013-05-05, 07:18

@Silvanash La mejor solución para lo de los ordenadores viejos es usar un ordenador viejo, o uno con pocas prestaciones. El 2 quizá con poner un script AntiLag fuera suficiente. @Orochii Acción-Proceso-Reacción(Actos premeditados), en ocasiones Acción-Proceso(Recolección de datos del entorno) o Acción-Reacción(Actos refeljo). Ejemplos:
Acción-Proceso-Reacción:
No - Escapar
Caperucita ve al lobo - ¿Tiene navaja? <
Si - Sacar Navaja
Acción-Proceso:
Caperucita ve al lobo - Veces que veo al lobo + 1
Acción-Reacción:
Caperucita ve al lobo - Entrar en pánico (Escapar y gritar)

Yoenmii
avatar
yoenmii
Novato
Novato

0/3

Créditos 91

Gracias : 2

Volver arriba Ir abajo

Re: Engines y jugabilidad, un pequeño vistazo a esta empanada mental

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.