Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Jangse en Febrero 23, 2014, 06:34:42 PM

Título: ¿Cuál es la fórmula exacta de la gravedad?
Publicado por: Jangse en Febrero 23, 2014, 06:34:42 PM
Aunque todavía no estoy creando ningún juego de plataformas, quiero recopilar alguna información para cuando llegue el caso. Y algo que me interesa mucho, es el cálculo exacto (o lo mas aproximado) de la gravedad de un cuerpo. Es decir, hacerla la mas real posible.

A veces, ponemos un valor en gravity a lo tonto y parece que el personaje flote o bien que lleve piedras en los zapatos (de lo rápido que cae). Eso sin contar cuando al saltar parece que se haya tomado un Red Bull doble.

Googleando, he visto algunas fórmulas, donde argumentan que el valor a hallar es la aceleración en relación al peso de cuerpo (o su masa) y haciendo un cálculo con el índice de gravedad.

El cálculo resultante sería un valor que luego podríamos poner en la variable gravity. Por que normalmente se pone 12 o 10 por norma (si se trata de un personaje normal).

La fórmula sería la ley de la gravitación universal ¿No...? ¿Esto que he encontrado sería lo correcto?

Citarley de gravitación universal:
Fgrav=G mm'/r( r al cuadrado)

r ----------es la distancia a la que se encuentra el cuerpo de la superficie terrestre.
m----------masa de dicho cuerpo
m'----------masa de la tierra.
G----------es una constante cuyo valor es=6.67*10 elevado a -11 Nm(m al cuadrado)/kg(kg al cuadrado)

Título: Re:¿Cuál es la fórmula exacta de la gravedad?
Publicado por: penumbra en Febrero 23, 2014, 07:51:40 PM
No quieras complicar las cosas. No hay ninguna fórmula de la gravedad en el GM "NORMAL". eso que se llama gravedad en game maker es símplemente un vector etiquetado con un nombre significativo que permite mover un objeto a cierta velocidad. Incluso a la "gravedad" en game maker le puedes cambiar la dirección en que actúa, así de falsa es.

Como ejercicio podemos hacer una lista de los 10 mejores juegos de plataforma de la historia y podría apostar que NINGUNO se basa en crear una gravedad exacta, ni en simular lo más fielmente posible un sistema de físicas. En muchos casos simular la exactitud del mundo real destruiría la jugabilidad.

No hay una norma para darle magnitud a la gravedad. Depende de cómo sientas que funciona para tu juego y tiene mucho que ver  la velocidad de la habitación. Ahora, si quieres crear un sistema de físicas, GM no es la solución, necesitas un lenguaje más preciso y rápido.

La otra posibilidad, si quieres que tu juego se comporte considerando factores como masa, torque, densidad, fricción, etc. es usar una dll como ExtremePhysics o el sistema de físicas Box2D de Game Maker Studio..
Título: Re:¿Cuál es la fórmula exacta de la gravedad?
Publicado por: Jangse en Febrero 23, 2014, 08:13:40 PM
Ok. Solo era por curiosidad. Para dependiendo el juego creado, su gravedad se le aproximara a la real. Que no quiero decir exacta.
Título: Re:¿Cuál es la fórmula exacta de la gravedad?
Publicado por: penumbra en Febrero 23, 2014, 08:27:04 PM
Pero fíjate que por ejemplo, que la física se va al @!$ en los juegos de plataforma.

Todos los personajes de juegos de plataforma saltan distancias que están más allá del potencial humano. Mario Bross a duras penas podriá aplastar una tortuga, pero nunca llegar de pie hasta el tubo más corto del juego. En las plataformas, cualquier "personajete" logra saltar su estatura y aun mucho más, cosa que no pasa en la realidad.

Sería raro simular una gravedad "real" cuando el personaje puede saltar dos metros sin sudar.
Título: Re:¿Cuál es la fórmula exacta de la gravedad?
Publicado por: Jangse en Febrero 23, 2014, 09:28:35 PM
Cita de: penumbra en Febrero 23, 2014, 08:27:04 PM
Pero fíjate que por ejemplo, que la física se va al @!$ en los juegos de plataforma.

Todos los personajes de juegos de plataforma saltan distancias que están más allá del potencial humano. Mario Bross a duras penas podriá aplastar una tortuga, pero nunca llegar de pie hasta el tubo más corto del juego. En las plataformas, cualquier "personajete" logra saltar su estatura y aun mucho más, cosa que no pasa en la realidad.

Sería raro simular una gravedad "real" cuando el personaje puede saltar dos metros sin sudar.

Bueno, yo me refería mas bien a la gravedad de caída. Osea, que esta en una plataforma y si se cae por ella, pues que lo hiciera mas o menos como en la realidad. Saltar ya se que es inhumano. Pero depende el artilugio que llevara el personaje sería también 'real' dicho salto. Es a la atracción que provoca la tierra sobre el personaje. Aunque había una teoría que no era la tierra la que atraía, si no el espacio que comprimía.
Título: Re:¿Cuál es la fórmula exacta de la gravedad?
Publicado por: Mgbu en Febrero 24, 2014, 08:46:40 PM
EDIT: Me olvidé de decir que vas a odiar como van a quedar las caídas del juego, así que la respuesta corta para que quede divertido es poner vspeed+=0,001 en el evento step y limitar la velocidad de caída con if vspeed>0.1 vspeed=0.1 (también en step). Obviamente probá con distintos numeros para ver como queda

La fórmula que en realidad necesitarías es otra. Porque lo único que querés calcular es la aceleración (la fuerza no es necesaria)
Podés ver esta parte de Wikipedia (http://es.wikipedia.org/wiki/Ley_de_gravitaci%C3%B3n_universal#Aceleraci.C3.B3n_de_la_gravedad), pero la cosa es que en la tierra todas las cosas caen a la misma velocidad (sin tener en cuenta el rozamiento) y si hacés los cálculos vas a ver que la aceleración de los objetos al nivel del mar en la tierra es de más o menos 9.8m/s2
Entonces en tu juego lo único que tenés que hacer es acelerar hacia abajo el personaje a 9.8m/s2. Para entender mejor que significa m/s2 podés pensar que por cada segundo, el personaje tiene que acelerar 9.8m/s, que es lo mismo que acelerar 35,3km/h en cada segundo. pero es más fácil medir la velocidad en m/s cuando hacés el juego:
Entonces cómo hacer eso en GM? Si usas la variable vspeed vas a tener que cambiar el valor en cada step. Si el personaje acelera 9.8m/s en un segundo ¿Cuánto acelera en cada step? Calculalo con 9.8/cantidaddestepsporsegundo y vas a obtener 0.3266m/s/step si la room_speed es 30
El problema ahora es que está la velocidad medida en metros/segundo, pero vspeed debe estar en píxeles/step. Entonces si dividimos 0.3266m/s/step/cantidaddestepsporsegundo con una room_speed de 30 tenemos 0,010888889m/step/step. Por último para pasar de metros a píxeles tenés que dividir 0,010888889m/step/step/pixelespormetro, píxeles por metro depende del tamaño de tu personaje, si tu personaje mide 2m y tiene un sprie de 32pixeles de altura, entonces pixelespormetro sería 16, quedando 0,00068055556pixeles/step/step
Entonces en el evento step tenemos que acelerar al personaje hacia abajo, lo podés hacer con vspeed+=0,00068055556

Espero que no haya hecho mal las cuentas  :P
Título: Re:¿Cuál es la fórmula exacta de la gravedad?
Publicado por: Jangse en Febrero 24, 2014, 08:51:15 PM
Cita de: Mgbu en Febrero 24, 2014, 08:46:40 PM
La fórmula que en realidad necesitarías es otra. Porque lo único que querés calcular es la aceleración (la fuerza no es necesaria)
Podés ver esta parte de Wikipedia (http://es.wikipedia.org/wiki/Ley_de_gravitaci%C3%B3n_universal#Aceleraci.C3.B3n_de_la_gravedad), pero la cosa es que en la tierra todas las cosas caen a la misma velocidad (sin tener en cuenta el rozamiento) y si hacés los cálculos vas a ver que la aceleración de los objetos al nivel del mar en la tierra es de más o menos 9.8m/s2
Entonces en tu juego lo único que tenés que hacer es acelerar hacia abajo el personaje a 9.8m/s2. Para entender mejor que significa m/s2 podés pensar que por cada segundo, el personaje tiene que acelerar 9.8m/s, que es lo mismo que acelerar 35,3km/h en cada segundo. pero es más fácil medir la velocidad en m/s cuando hacés el juego:
Entonces cómo hacer eso en GM? Si usas la variable vspeed vas a tener que cambiar el valor en cada step. Si el personaje acelera 9.8m/s en un segundo ¿Cuánto acelera en cada step? Calculalo con 9.8/cantidaddestepsporsegundo y vas a obtener 0.3266m/s/step si la room_speed es 30
El problema ahora es que está la velocidad medida en metros/segundo, pero vspeed debe estar en píxeles/step. Entonces si dividimos 0.3266m/s/step/cantidaddestepsporsegundo con una room_speed de 30 tenemos 0,010888889m/step/step. Por último para pasar de metros a píxeles tenés que dividir 0,010888889m/step/step/pixelespormetro, píxeles por metro depende del tamaño de tu personaje, si tu personaje mide 2m y tiene un sprie de 32pixeles de altura, entonces pixelespormetro sería 16, quedando 0,00068055556pixeles/step/step
Entonces en el evento step tenemos que acelerar al personaje hacia abajo, lo podés hacer con vspeed+=0,00068055556

Espero que no haya hecho mal las cuentas  :P

No veas! Casi mejor poner gravity = 12 y tiro millas ¡Pero no! Cuando haga un plataformas lo pondré en practica. Me lo guardo hasta entonces. Gracias...