Tengo un controlador de personaje básico configurado para un juego de plataformas en 2D con Box2D, y estoy empezando a modificarlo para tratar de que se sienta bien. Los motores de física tienen muchas perillas para ajustar, y no me queda claro, escribiendo con un motor de física por primera vez, cuáles debo usar. ¿Debería el salto aplicar una fuerza para varias garrapatas? Un impulso? Establecer directamente la velocidad? ¿Cómo evito que el avatar se pegue a las paredes sin eliminar toda su fricción (o elimino toda la fricción, pero solo en el aire)? ¿Debo modelar el personaje como una cápsula? ¿Una caja con esquinas redondeadas? ¿Una caja con dos ruedas? ¿Solo una gran rueda? ¡Siento que alguien debe haber hecho esto antes!
Parece que hay muy pocos recursos disponibles en la web que no sean "la primera física del bebé", que se cortaron donde espero que alguien ya haya resuelto los problemas. La mayoría de los ejemplos de motores de física para plataformas tienen controles de sensación de flotación, saltos en el aire o comportamiento fácilmente explotable cuando la penetración temporal es demasiado alta, etc.
Algunos ejemplos de lo que quiero decir:
- Un pequeño toque de salto salta una corta distancia; Un largo toque salta más alto.
- Patinaje corto al parar o invertir direcciones a alta velocidad.
- Pararse de manera estable en pendientes (pero tal vez deslizarse hacia abajo al agacharse).
- Velocidad analógica cuando se usa un controlador analógico.
- Todas las otras cosas que separan a los buenos plataformas de los malos.
- ¿Me atrevo a sugerir, plataformas móviles estables?
Realmente no estoy buscando "hey, haz esto". Obviamente, lo correcto depende de lo que quiero en el juego. Pero espero que alguien en algún lugar haya pasado por las posibilidades y haya dicho "bien, la técnica A sí presenta X bien, la técnica B sí hace bien Y, pero eso no funciona con C", o tiene algunos ejemplos más allá de "if (key = = espacio) character.impulse (0, 1) "
Honestamente, no creo que usar un motor de física sea el enfoque correcto para algo de ese tamaño de dominio con requisitos súper estrictos.
Solo escríbelo todo tú mismo. Obtendrá resultados mucho mejores diciendo "mueva el personaje hacia arriba por x unidades en esta forma de parábola cuando mantenga presionado el botón de salto durante la longitud y" que tener un montón de botones para ajustar.
fuente
Escribí una serie de artículos sobre cómo construir un juego de plataformas desde cero utilizando tecnologías modernas e incluye cómo manejé la física simple:
http://www.wildbunny.co.uk/blog/2011/12/14/how-to-make-a-2d-platform-game-part-2-collision-detection/
Sin embargo, si desea algo más de alta tecnología, es completamente posible abordar esto utilizando un motor de física completo. Aquí hay una técnica que puede usar (de Little Big Planet) que hace que el personaje del jugador sea una parte completamente integrada del motor de física:
En lugar de aplicar impulsos o establecer velocidades para mover al jugador como "entradas externas" al motor de física, puede desarrollar una restricción que controle al personaje.
Por lo tanto, esta restricción tendrá la velocidad y dirección deseadas por el jugador como entrada (del juego) y modelará cosas como la fuerza y velocidad máximas del jugador. La restricción intentará mover al jugador de acuerdo con sus entradas (y obedeciendo los máximos), y debido a que es una restricción, aplicará una fuerza igual y opuesta sobre el objeto en el que el jugador está parado, permitiendo así al jugador pararse en plataformas móviles y para afectar las cosas sobre las que se mueve.
Hacer cosas como esta significa que puede hacer que el jugador sea totalmente capaz de lidiar con situaciones como estar debajo de una gran pila de cajas o saltar a través de varias plataformas en movimiento porque ahora es una parte central del motor de física.
¡Espero que ayude!
Saludos, Paul.
fuente
Esta pregunta ha tenido una discusión significativa en los foros de Box2D. Si lees las discusiones sobre el movimiento del personaje, el salto o el juego de plataformas, encontrarás todos los problemas posibles. Sin embargo, el problema se volvió lo suficientemente complicado como para actualizar el sistema de filtrado de colisiones y crear un ejemplo de Test Bed únicamente para mostrar cómo se debe hacer.
fuente