[VIDEO TUTORIALES] mod_chipmunk con PhysicsMotion API.

Started by Erkosone, January 20, 2013, 04:02:56 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Erkosone


Kalas

Se te agradece mucho, estos tutoriales estan deluxe!!! *o*

Erkosone


Kalas

siii sirven mucho como no tienes idea, y una pregunta, se puede usar modo 7 con esto?

Erkosone

Claro que si, no deja de ser 2D el modo7, puedes usarlo sin ningún problema, de hecho yo lo uso y funciona perfecto, tanto es scroll tipo RPG como en mode7 tipo marioKart de snes.

Kalas

Siii eso estaba practicando de hace unos dias, esque apenas y estoy aprendiendo el modo 7, crei ke habria algun tipo de complicacion, y nuevamente gracias!!!

Kalas

Hola, ahora tengo una pregunta de novato xD , como podria hacer que mi personaje (mario bros por ejemplo) incluirlo en alguno de tus ejemplos,  pueda actuar como lo haria normalmente en un juego de plataformas -sin que mario se caiga de cabeza de alguna esquina o se vaya de espaldas despues de chocar con algo en el aire o lo afecte alguna pendiente o cuando colisione en el aire con alguna pared-, he intentado cambiar valores aun me falta estudiar mucho de fisica para poder comprender todo esto todavia y te agradeceria mucho un ejemplo, de hecho te agradezco ya por todos los videos, la idea esque sea un mario bros normal :D 

Erkosone

Hola Kalas, pues es mas sencillo de lo que parece, mira, para lo que quieres conseguir hay que tener claros varios conceptos básicos:


1 - Elasticidad.
2 - Fricción.




1 - Elasticidad, en si este parámetro define cuanta energía cinética puede absorber un cuerpo, osea, define hablando mal y rápido para que nos entendamos cuanto de deformable es un cuerpo, en el caso que comentas "mario bros" la elasticidad debería ser cercana a cero o directamente cero, ya que no deseas que el cuerpo absorba energía cinética en una colisión y luego aplique automáticamente un rebote, con esto conseguirás que al chocar no se produzca un rebote.


2 - Fricción, este parámetro define el nivel o la cantidad de rozamiento que se aplica al cuerpo en cuestión, PERO.. debes saber que, durante un contacto entre entidades sucede algo así:


- Al colisionar dos cuerpos, entra en juego el llamado momentum o "momento de inercia", el cual se define a si mismo como la suma de todas las fuerzas que intervienen en la colisión.
En el están incluidas varias variables complejas que requieren de cálculos bastante elaborados para obtener el resultado de la colisión, normalmente cuando hablamos de física para vídeo juegos se suele simplificar la explicación diciendo que:


la velocidad del cuerpo A y la masa del cuerpo A + la velocidad del cuerpo B y la masa del cuerpo B conforman el momentum o momento de inercia.. pero esto es completamente falso.


En realidad esto solo se aplica para una colisión completamente elastica, osease... esto sirve para el choque entre por ejemplo "2 bolas de billar", si te lo imaginas verás claramente que no hay deformación en las bolas, y realmente esa suma de variables puede servir, pero para algo mas complejo como un cuerpo humano la cosa cambia..


Debes tener en cuenta algo que normalmente no se explica, y es que si ya sabes que el rozamiento de tu "mario bros" ha de ser muy elevado, el rozamiento de las plataformas también ha de serlo, por el simple hecho de que si no quieres que el personaje termine "esquiando" o "patinando" por los suelos debe ser así.


Pero esto conlleva un problema colateral, y es que si mas adelante decides incluir objetos "semi elasticos" en tu juego como por ejemplo un trineo.. o un barril.. imagina que quieres empujar una caja y claro... quieres que se pueda empujar, no quieres que se quede clavada en el suelo..




Esto nos lleva a reflexionar sobre el tema de la fricción, y es que nunca debes otorgar a un objeto un valor a una de sus propiedades que defina su reacción por completo, debes tener en cuenta que, si quieres que el muñeco no patine has de buscar un valor de rozamiento semi alto en el, y un valor de rozamiento semi alto en el entorno, para así tener un margen de trabajo con el entorno y poder crear entidades que reaccionaran con otro tipo de respuesta. si creas un suelo con rozamiento super elevado, esto se aplica a todo lo que haga contacto con el.. entonces pasa que..


Con un entorno con excesivo rozamiento tendrás que joderla y crear entidades que puedan deslizarse por el con su propio coeficiente de rozamiento "excesivamente bajo" y esto te traerá problemas cuando tu muñeco conlisione con cosas con rozamientos muy bajos..






Solución?


- Simplemente monta un pequeño escenario de prueba, otorga al personaje una elasticidad de CERO, un rozamiento de 0.5, y crea el entornor con un rozamiento de 0.5 o 0.6 a lo sumo.
- Diseña ya desde el inicio los prototipos de objeto que van a entrar a escena en tu juego, esto es importante tenerlo claro desde ya.
- Y suelta varios objetos en la escena, y a tu personaje también, y haz las pruebas necesarias hasta que encuentres el grado de respuesta que buscas.


Pero recuerda que si tu personaje rebota, no depende solo de el!!! entra en juego la elasticidad del entorno también!  Esto grabatelo en la cabeza por que se suele olvidar y uno acaba destrozando el juego con las pruebas jeje.. te lo digo por experiencia.




Como código ya ves que hacer un ejemplo sería algo muy simple, así que te lo dejo a ti para que pruebes y comentes tus resultados ;)


Lo mas difícil de esto es encontrar una tabla donde poder consultar los valores que debes aplicar basandote en las propiedades de diversos materiales "en el mundo real", por suerte tengo una tabla con estos datos, me costó un horror crearla por que por algún motivo que desconozco no existe nada así en internet.. osea.. una tabla de valores enfocada a la simulación de física por computador.. hay tablas pero están incompletas por que son para cálculo y nada mas..


Dame un rato que busco la mia y te la pego por aquí, en ella verás que están los materiales que son mas comunes en "video juegos" y podrás copiartela como chuleta para sarle valores bien ajustados a tus objetos ;)

Erkosone

#53
Aqui está la tabla, es un trozo de código de un editor de archivos Fpg que hice para otro lenguaje, en ese editor puedes crear los objetos de física directamente desde el fpg..
Si algún dia me armo de paciencia y hago el port de una librería de interfaz de usuario que tengo para bennuGD crearé el editor para bennu, es muy practico y te ahorra infinito trabajo.



materials2D[1].nombre =       "WOOD";
   materials2D[1].friccion =   0.50f;
   materials2D[1].elasticidad = 0.17f;
   materials2D[1].densidad =    0.57f;
   
   materials2D[2].nombre =       "METAL";
   materials2D[2].friccion =   0.13f;
   materials2D[2].elasticidad = 0.17f;
   materials2D[2].densidad =    7.80f;
   
   materials2D[3].nombre =       "STONE";
   materials2D[3].friccion =   0.75f;
   materials2D[3].elasticidad = 0.05f;
   materials2D[3].densidad =    2.40f;
   
   materials2D[4].nombre =       "PLASTIC";
   materials2D[4].friccion =   0.38f;
   materials2D[4].elasticidad = 0.09f;
   materials2D[4].densidad =    0.95f;
   
   materials2D[5].nombre =       "RUBBER";
   materials2D[5].friccion =   0.75f;
   materials2D[5].elasticidad = 0.95f;
   materials2D[5].densidad =    1.70f;
   
   materials2D[6].nombre =       "HUMAN BODY";
   materials2D[6].friccion =   1.00f;
   materials2D[6].elasticidad = 0.00f;
   materials2D[6].densidad =    0.95f;


No he comentado nada sobre la masa, sabes de que va el tema de la densidad? o necesitas una explicación?
Por que la masa no se puede poner al tun tun sin mas... no te va a funcionar..  si no sabes de que va y necesitas ayuda con la masa y densidad dime algo y te lo explico encantado.

Kalas

con toda esta explicacion ya me puedo guiar mucho mejor que antes *u* , sinceramente no tenia ni idea de como comenzar a hacer algunas cosas , y pues porfavor explicame el tema de la masa porque si lo necesito y estoy aprediendo mucho de tus explicaciones, gracias por la tabla y gracias por todo, empezare a hacer mis pruebas :D

Erkosone

Vale mira te explico, luego me extiendo mas que acabo de llegar del curro y bueno.. estoy petado XD..


Haber.. a cada entidad del juego debes asignarle una masa, vale.. pero que masa??


Simple, esto debe hacerse con cabeza, no sirve poner un valor así a ojo ya que nunca va a funcionar de forma realista, y es aquí donde tuve la complicación para crear la tabla que te he compartido antes, ya que no hay ningúna tabla o por lo menos yo no he conseguido nunca encontrar una donde exponga los 3 factores clave para diseñar objetos con física para un juego.


La masa NUNCA debe asignarse a mano, hay que hacer lo siguiente:


1- Calcular el área del gráfico que tiene la entidad.
2- Conociendo el área y sabiendo que estamos tratando con objetos 2D.. se multiplica el área por la densidad, y este es el valor de la masa.


De esta manera tienes que, si creas un objeto de madera y un objeto de metal del mismo tamaño para tu juego, debido a que las densidades son diferentes, la masa resultante será completamente distinta entre ellas, y lo mas importante, será una masa  acorde al material con el que deseas trabajar/simular.


Llegado este punto tienes que tener bien claras las formulas para calcular el area de un polígono, triangulo, circulo y rectángulo.


Por suerte para nosotros, ChipMunk incorpora nativamente funciones para la obtención de la masa de una entidad, así que te aconsejo repasar la documentación de mod_chipmunk y ver que funciones tienes disponibles, y en función del tipo de entidad usar una u otra, primero recojes el area de tu entidad, y acto seguido la multiplicas por el valor de densidad que tienes en la tabla de datos.


De esta manera obtendrás una simulación completamente realista y rica en respuesta.


Espero que se entienda el concepto, no me extiendo mas por que quiero dormir un poco XD.. pero ya ves que no es nada del otro mundo.. es bien simple y los resultados son asombrosamente realistas.


Un saludo ;)

Erkosone

Te dejo un link a youtube para que veas lo que se puede lograr facilmente ;)


Es un pequeño test que programe hace un tiempo..
https://www.youtube.com/watch?v=tuDg9ewD9lI&list=UUqyMzsaKIcmlb2vPauKewVg

Kalas

si si te entendi, wowwww que excelente esta el juego de ninja *o* enserio te agradezco de todo corazon el que me hayas explicado todo esto, y bueno ahora ya me toca a mi a meterle mano a lo que llevo,  al final tambien tengo planeado hacer un juego de peleas pero la idea es ir probando, luego te cuento que tal me fue o si no pues te volvere a molestar :p

BlySntK

Sorry por revivir this thread... pero... Links for PhysicsMotion not work :( ¿Podrías mirar, Erko, de arreglarlos? Thanks you, broda! (yes, I'm refer to the download links).
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)

l1nk3rn3l

Intenta contactar con el autor tiene red social

en el canal de youtube tiene google++


https://plus.google.com/109664673208643419398