Actualmente estoy haciendo un juego en C # usando Direct X 9.0. El remake del juego es Donkey Kong NES. Tengo casi todo terminado, pero tengo problemas con la física del salto de Mario. Tengo variables declaradas para las coordinaciones Y y X.
Me preguntaba si había un método simple para hacer esto. He buscado una respuesta alta y baja, pero las respuestas que he encontrado son irrelevantes o utilizan un lenguaje de programación diferente como XNA.
Actualmente tengo una variable bool configurada para verificar si se ha presionado W y eso activará cualquier código para hacerlo saltar. He estado jugando como.
if (jump == true)
{
Playerypos -= vel;
Playerxpos += vel;
}
Lo que no funcionó tan bien. He buscado por todas partes una respuesta y ahora estoy desesperado, si alguien podría orientarme en la dirección correcta hacia una solución simple. Eso seria genial. Muy apreciado por cualquier respuesta.
Respuestas:
En primer lugar, XNA también usa C # también, por lo que es el mismo lenguaje de programación. Y aunque la API subyacente puede tener algunas diferencias con DirectX, eso no tiene nada que ver con el salto, por lo que los mismos tutoriales o respuestas deberían aplicarse aquí. Además, existen numerosas formas de implementar esto, dependiendo de muchos factores. Lo que describiré a continuación es solo una de las posibilidades.
Requisitos básicos de física
Primero necesita algunas variables físicas básicas y cálculos en su ciclo de actualización. En particular, debe definir la posición, la velocidad y la gravedad, y su ciclo de actualización debería estar haciendo algo similar a esto (detección de colisión y respuesta omitida por simplicidad):
Salto de altura fija
Ahora, la forma más fácil de implementar un salto que siempre tenga la misma altura, sin importar cuánto tiempo presione la tecla, es simplemente cambiar la velocidad vertical una vez. Esto hará que el personaje comience a elevarse, mientras que la gravedad se encargará automáticamente de derribarlo:
Importante : no quieres poder comenzar un salto si tu personaje no está en el suelo, por lo que deberás agregar un cheque para eso.
Salto de altura variable
Pero los juegos como Mario y Sonic tienen un salto variable donde la altura del salto depende de cuánto tiempo presiona el botón. En este caso, deberá manejar presionando y soltando la tecla de salto. Podrías agregar algo como:
Al ajustar todos estos valores (es decir, los números como
0.5
,-12.0f
o-6.0f
) en el código anterior, puede cambiar la sensación de su salto, qué tan alto salta, cuánto impulso mantiene incluso después de soltar el botón de salto, qué tan rápido cae, etc. .Importante No llame a estas funciones cada cuadro. Llámelos solo una vez cuando se presione o suelte la tecla. De lo contrario, tu personaje volará en lugar de saltar.
Ejemplo de trabajo
Acabo de crear un ejemplo rápido de las técnicas descritas anteriormente, que puede probar en su navegador aquí (presione el botón del mouse para saltar, suéltelo a la mitad para controlar la altura del salto). Está en JS, pero como mencioné anteriormente, el lenguaje es irrelevante en este caso.
http://jsfiddle.net/LyM87/
fuente
Como en física. Solo en el momento en que presionas
jump key
y el personaje está en el suelo, agrega velocidad hacia arriba (se llama impulso), pero hace que el personaje caiga por gravedad todo el tiempo.Si no desea que el personaje salte cada vez que toca el suelo, porque lo está sosteniendo
jump key
, agregue lajump key is being pressed
variable que borra despuésjump key
se libera y se establece después. Pseudocódigo:Si usé tu camino:
Cómo
donkey.y
cambiará depende de tu imaginación. La velocidad debería hacerse más pequeña. El burro está en el aire para que se vea bien.fuente