¿Cuándo debo usar un motor de física? [cerrado]

12

Desde que descubrí Box2D , lo estoy usando para cualquier aplicación similar a un juego que intento escribir, desde prototipos muy pequeños o pequeños programas para probar algo, hasta proyectos reales.

Gracias a esto, es muy fácil manejar cualquier cosa, desde colisiones hasta la física real.

Sin embargo, a veces tengo algunas dudas al respecto: si solo tengo que manejar círculos o AABB, y no necesito herramientas de física avanzadas (articulaciones o cosas por el estilo), creo que un motor de física podría agregar una especie de gran gastos generales innecesarios

Para reasumir mi pregunta: ¿usarías Box2D (u otros motores de física) en un juego donde la física es realmente simple (como Super Mario, digamos)? Y si no, ¿por qué?

peoro
fuente
2
Haz lo que se siente bien. ¿Crees que tu juego necesita un motor de física? ¿Crees que Mario se beneficiaría de Box2D? El más nuevo Mario ciertamente tiene una sensación agradable con buena física, pero no se parece en nada a nada que haya visto construido en Box2D.
Jeff
@Jeff: Eso depende de si la pregunta "¿Cuándo debo usar Box2D?" o "¿Cuándo debo usar un motor de física?". El nuevo Mario ciertamente contiene un motor de física.
1
@ Joe Wreschnig: Sí, pero ¿hay algún caso en el que no se use un motor de física? Solo el tiempo que se me ocurre sería una aventura de texto, o señalar y hacer clic. Supongo que depende de cuán general desees hacer tu definición de motor de física
Jeff
@Jeff: Pocos juegos de rompecabezas (no físicos) necesitan uno, por ejemplo, Tetris, Bejeweled. En los juegos de acción, podría argumentar que la mayoría de los shmups 2D no se benefician de un motor de física, ya que generalmente solo necesitan verificaciones de solapamiento AABB / círculo, sin respuesta de colisión, rutas de movimiento absolutamente fijas y velocidad constante. Sin embargo, los juegos de plataformas tienen que ver con la física.

Respuestas:

8

Si la memoria, el espacio en disco, el esfuerzo de desarrollo o el tiempo de procesador utilizado para Box2D es demasiado para sus propósitos, entonces no lo use. De lo contrario, no hay razón para evitarlo si lo encuentra útil.

Gregory Avery-Weir
fuente
2
Esto es todo a lo que realmente se reduce. Si te facilita la vida y no te bloquea de las plataformas que deseas, es una victoria, incluso si no usas partes de ella.
1
O, en otras palabras, "la única razón para reinventar la rueda es aprender a reinventar la rueda".
Exilyth
4

Algo tan fácil como Super Mario no, ya que realmente no tiene mucha física. (Mario no afecta la física de otro objeto con su salto)

si está usando física en el sentido de que varios elementos (más de uno) usan física para afectar el resultado de otros objetos, entonces usaría un motor.

Fantasmas
fuente
Por otro lado, Mario tiene impulso, aceleración, un tamaño variable y una colisión direccional, todo lo cual se obtiene "gratis" con un motor de física, y no son simples comprobaciones de superposición de límites.
Estoy de acuerdo: creo que la mayoría de las veces un motor de física le dará muchas cosas que sería una pérdida de tiempo implementar.
Christopher Horenstein
3
Es cierto que siempre es mejor no inventar la rueda, solo encuentro que si solo quiero una rueda, no voy a tomar un plano para un automóvil. Además de eso, sabrás más sobre tu juego como un todo, y más fácil alterar / cambiar la física.
Spooks
1
Esa es una analogía realmente horrible. Es más como si quisieras una rueda y ejes y tal vez una columna de dirección y un motor, pero tal vez no el tablero o las ventanas eléctricas.
3
¿Quién no querría ventanas eléctricas?
Spooks
2

Mi respuesta es sí, absolutamente use un motor de física como Box2D para cosas simples, porque no debe pasar tiempo de desarrollo innecesario implementando algunas de las características que obtiene rápidamente de un motor de física. Por ejemplo, defina un cuerpo estático y suelte un cuerpo dinámico sobre él, y aplique fuerza a su cuerpo dinámico para la entrada direccional, y obtendrá un juego de plataformas en unos minutos. No creo que un motor agregue suficientes gastos generales para que esto no valga la pena.

Christopher Horenstein
fuente
3
sin embargo, se podría decir que descubrir cómo implementar y usar Box2D tomaría más tiempo para crear una física simple. (aunque supongo que esto depende del alcance del uso de la física)
Spooks
1
@Spooks: No puedo imaginar nada "más fácil" que Box2D que todavía sea útil.
Estoy totalmente de acuerdo con Joe aquí; simplemente no hay un reemplazo simple para la utilidad que viene junto con el uso de Box2D. No puedo imaginar codificar algo que satisfaga las necesidades de uno más rápido que aprender a crear algunos accesorios y definir la gravedad con Box2D.
Christopher Horenstein
1

Si la "física" en un juego es simple, no hay necesidad de importar un motor de física.

Utilizo el término física libremente, ya que hay una diferencia entre modelar física y simular física. Una cosa muy importante para diferenciar.

Por ejemplo, en Mario Bros. cuando corres y te detienes, te deslizas un poco. Piensa en cómo podrías implementar eso.

Puede modelarlo definiendo todas las variables necesarias: por ejemplo. masa, gravedad, coeficiente de fricción, empuje, etc. y luego calcular su nueva velocidad, aceleración, etc.

¿Pero vale la pena? Puedes simular el mismo efecto disminuyendo la velocidad de los jugadores mientras no se mueven ...

Algo como:

if( pressing movement key ) { 
 speed = 5; 
} else { 
 if(speed) speed--; // slide!
} 

La diferencia es que uno es física y el otro no. Hay pros y contras para ambos. Pero como regla general para juegos simples, es mucho más fácil fingirlo.

aaronfarr
fuente
1
Ese tipo de física es asqueroso. Si vas a fingirlo, también podría hacer que se vea bien. fricción = .9 o algún número por debajo de 1. velocidadX * = fricción; speedY * = fricción;
AttackingHobo
2
Por supuesto, al final del proyecto se convierte en "si (presionando la tecla de movimiento y no moviéndose y sobre hielo y no bajo el agua y tienes este encendido especial y no estás montando una bota y ...)".
@AttackingHobo: El objetivo de la publicación no es hacer un buen algoritmo de deslizamiento ... Es ilustrar la diferencia entre una simulación y un modelo.
aaronfarr
@Joe: Esas son solo modificaciones a su variable de fricción ... tal vez usted y @AttackingHobo deberían conversar: P Con un motor de física, debe definir propiedades para cada objeto en el juego. Mi punto es que enchufar un motor de física para juegos simples no debería ser automático. Es situacional.
aaronfarr
1
@aaronfarr: No hay diferencia entre una simulación y un modelo; para estos propósitos son sinónimos. Todo lo que ha demostrado es que una parte aislada de un modelo / simulación de juguete es menos código que la totalidad de Box2D.
0

Debes decidir de acuerdo a la situación

Profesionales que usan su motor personalizado

  • Software bajo control (sin cambios debido a una nueva versión)
  • Adecuado para su juego (solo las características que necesita para su juego, en la forma en que las necesita)
  • Flexibilidad (cualquier dinámica loca que desee puede codificarse, cualquier característica futura no dependería del motor)
  • Experiencia de aprendizaje (quizás algún día necesites mejorar un motor y necesites cómo construir uno)
  • Menos estudio y programación para funciones simples (a veces hacer algo con un motor puede requerir comprender su estructura profundamente ... y puede no ser digno)
  • Mayor rendimiento para funciones simples (para funciones específicas simples, puede obtener un mayor rendimiento que con un motor de propósito bastante general)
  • Menos memoria (el objeto y el código pueden ocupar mucho menos espacio y memoria cuando solo se utilizan las funciones necesarias)

Ventajas del motor de física comercial:

  • Puede adaptarse al nuevo hardware y al nuevo sistema operativo sin mucho esfuerzo
  • Menos esfuerzo de estudio y programación para funciones complejas
  • Mayor rendimiento para funciones complejas.
Dimitri Ognibene
fuente