Hay una cosa que me ha estado desconcertando, y es cómo implementar un salto 'falso impulso' en un juego de plataformas. Si no sabes de lo que estoy hablando, piensa en los saltos de Mario, Kirby y Quote de Cave Story. ¿Qué tienen en común? Bueno, la altura de tu salto está determinada por cuánto tiempo mantienes presionado el botón de salto.
Sabiendo que los 'impulsos' de estos personajes se construyen no antes de su salto, como en la física real, sino más bien mientras están en el aire , es decir, puedes levantar el dedo a la mitad de la altura máxima y se detendrá, incluso si con desaceleración entre él y el punto final; Es por eso que simplemente puede tocar para un salto y mantenerlo presionado para un salto largo, estoy fascinado por cómo mantienen sus trayectorias como arcos.
Mi implementación actual funciona de la siguiente manera:
Mientras se presiona el botón de salto, la gravedad se apaga y la coordenada Y del avatar se reduce por el valor constante de la gravedad. Por ejemplo, si las cosas caen en unidades Z por tic, aumentará las unidades Z por tic.
Una vez que se suelta el botón o se alcanza el límite, el avatar desacelera en una cantidad que haría que cubriera X unidades hasta que su velocidad alcance 0; una vez que lo hace, acelera hasta que su velocidad coincide con la gravedad; siguiendo el ejemplo, podría decir que acelera de 0 a Z unidades / tic mientras aún cubre X unidades.
Sin embargo, esta implementación hace saltos demasiado diagonales, y a menos que la velocidad del avatar sea más rápida que la gravedad, lo que lo haría demasiado rápido en mi proyecto actual (se mueve a aproximadamente 4 píxeles por tic y la gravedad es de 10 píxeles por tic, a un framerate de 40FPS), también lo hace más vertical que horizontal. Aquellos familiarizados con los juegos de plataformas notarán que el salto en arco del personaje casi siempre les permite saltar más lejos, incluso si no son tan rápidos como la gravedad del juego, y cuando no lo hace, si no se juega bien, demostraría ser Muy contrario a la intuición. Lo sé porque podría dar fe de que mi implementación es muy molesta.
¿Alguien ha intentado alguna vez en mecánicas similares, y tal vez incluso tuvo éxito? Me gustaría saber qué hay detrás de este tipo de saltos de plataformas. Si nunca antes ha tenido alguna experiencia con esto y desea probarlo, no intente corregir o mejorar mi implementación explicada, a menos que esté en el camino correcto, intente inventar su solución desde rasguño. No me importa si usas la gravedad, la física o cualquier otra cosa, siempre que muestre cómo funcionan estos pseudo-impulsos, funciona.
Además, me gustaría que su presentación evite una codificación específica del idioma; como compartirnos un ejemplo de C ++ o Delphi ... Por mucho que esté usando el marco XNA para mi proyecto y no me importe cosas de C #, no tengo mucha paciencia para leer el código de otros, y estoy ciertos desarrolladores de juegos de otros idiomas estarían interesados en lo que logramos aquí, así que no te preocupes por seguir el pseudocódigo.
Gracias de antemano.