Tilengine - The 2D retro graphics engine forum

Full Version: movimientos para naves enemigas y jefes
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hola.

Esta pregunta es para mi la mas importante y la que no he conseguido solucionar en ningun engine por falta de ejemplos,te pongo un video y te comento.


En el minuto 3:39 salen unos aviones rojos por la izquierda y parece que siguen una ruta,en el minuto 3:54 otra fila de aviones que sale por la derecha y sigue una ruta.En el minuto 4:47 sale un avion medio grande con un movimiento como bailando y en el minuto 4:58 sale un barco mediano con un movimiento bastante realista,es como si lo estuviera manejando una persona,en el minuto 5:23 sale un avion negro mediano con un movimiento realista.

Como se pueden programar esos movimientos,podrias crear un pequeño ejemplo o tal vez indicarme alguna pagina donde tenga alguna explicacion de esto con algo de codigo.

Te recomiendo que juegues a este juego en el mame,asi podras ver mejor los movimientos y disfrutar de este juego.
Buenas!
Esto que preguntas es interesante pero ningún engine te va a dar la solución terminada. Ahí es donde el programador usa sus conocimientos y experiencia para describir el movimiento. Se trata de disponer de un conjunto de herramientas sencillas de usar, genéricas -reaprovechables entre proyectos- pero que permitan flexibilidad para conseguir diferentes resultados. Yo suelo utilizar estos tres elementos:
  • Física básica: usar vectores de aceleración, velocidad y posición en 2 dimensiones. La aceleración modifica la velocidad, y la velocidad modifica la posición. Si no hay aceleración la velocidad es constante, y si no hay velocidad la posición es constante. Como tienes una modulación lineal de 2º grado (aceleración -> velocidad -> posición) se pueden conseguir giros, curvas y parábolas en el movimiento. Puedes implementar salto y caída en un juego de plataformas, inercia...
  • Trigonometría, que ya habías empezado a poner en tu proyecto. Poder trabajar con ángulos y vectores, que a su vez aplicas a la velocidad (o aceleración) de un objeto. Puedes hacer que un objeto persiga a otro "orbitándolo", modulando la aceleración con el vector que los une
  • Interpolación lineal: variar un valor linealmente entre dos extremos conocidos en función del tiempo, es sencillo y muy útil. Combinado con lo anterior, por ejemplo te permite modular el vector de aceleración a lo largo del tiempo, haciendo que los elementos sigan curvas controladas.
Como ves son tres herramientas matemáticas sencillas de manejar, genéricas, reutilizables y con muchas posibilidades que deben formar parte de cualquier motor de gameplay. Eso sí, hay que experimentar con ellas para ir consiguiendo el resultado que quieres.

Hay libros dedicados al tema, si ves la descripción de éste verás que aparece mucho de lo que te he comentado:
Physics for Game Developers
El libro esta en ingles,no puedo estudiar ese libro.

Lo que comentas esta muy interesante,pero sin ningun ejemplo me temo que es imposible de hacer mucho,ya que tu sabes manejar estos temas porque no me lo explicas aunque sea solo lo basico,con algun ejemplo para guiarme.Mientras voy a buscar informacion en español haber si encuentro algo.
Pues despues de estar 1 hora buscando no he encontrado casi nada,lo unico que he encontrado es alguna explicacion algo confusa del uso de lerp() en gamemaker.

He mirado en tus ejemplos y he visto que tienes creado tu propia funcion de lerp() pero la tuya tiene 5 parametros y la de gamemaker tiene solo tres,tambien busque en processing y este tambien tiene una funcion lerp() pero con solo tres parametros y hay ya me pierdo.

He visto dos funciones de processing muy interesantes.
-bezier()
https://processing.org/reference/bezier_.html
-curve()
https://processing.org/reference/curve_.html
-lerp()
https://processing.org/reference/lerp_.html

La formula de estas funciones no las he encontrado en ninguna parte,y tampoco he encontrado en ninguna parte lo que comentas de fisica basica para poder aplicarlo en tilengine.
El trazado de curvas es un asunto bastante más complejo y que tampoco es lo que se utiliza en los juegos clásicos como el que ponías de ejemplo de naves. Eso es para trazar curvas que siguen unos puntos de control, hay diferentes tipos, sobretodo se aplican al diseño vectorial.

La interpolación lineal que utilizo es la siguiente:
https://es.wikipedia.org/wiki/Interpolaci%C3%B3n_lineal
Como ves, usa 5 parámetros.

Desconozco dónde puede haber más información en castellano, pero seguro que hay, ya que todos esos temas son del ámbito de las matemáticas generales, no de los juegos videojuegos y mucho menos de tilengine en particular.

Te recomiendo que te apuntes a algún curso online de programación de juegos, en plataformas como edX, coursera, udemy, gametopia... hay mucha cosa y también en castellano. Es un área compleja. Yo aquí puedo dar soporte acerca de cómo usar tilengine y resolver problemas que surjan de su uso, pero otro tipo de contenidos quedan fuera del ámbito del foro. Hay otros lugares especializados donde te lo enseñarán mucho mejor.
Es una pena porque es lo ultimo que me faltaba para despues empezar a programar algun pequeño juego,de todas formas se agradece la ayuda de estos dias.Saludos
Yo encantado de darte soporte con tilengine Smile 

Lo de las matemáticas para movimiento no es complicado, pero es un conocimiento que debes adquirir y aplicar, y experimentar con ello. No hay ningún engine que te lo de hecho, ni ninguna receta lista para usar. Eso lo aportas tú como diseñador/programador. Hacer juegos no es trivial, no basta con saber cuatro cosillas por encima. Es un área compleja. La gente que hace juegos debe tener una serie de conocimientos, y hay diversas áreas (planificación, diseño, programación, grafismo, sonido, pruebas, promoción, dirección...) y hablo de juegos sencillos con pocas personas. Por eso hay cursos y másters de diversas academias y universidades. No hay atajos, lo que necesitas saber está ahí al alcance y muy bien explicado, pero tienes que hacerlo tuyo. Ir paso a paso, montar un prototipo básico que haga algo sencillo, entender cómo funciona, modificar valores y observar los cambios que produce. Luego añadir una característica nueva, e ir construyendo. No hay otra manera.

Mi proyecto del "PythonPlatformer" implementa movimiento inercial para el personaje y ondulatorio para los enemigos que vuelan, por ejemplo. Puedes examinarlo para tomar ideas.

Ánimo!