Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Múltiples montajes en un cuerpo o múltiples cuerpos?

Digamos que quería crear 1000, o tal vez 5000 líneas de cuerpo estático en la pantalla. Lo que me pregunto es, ¿cuál es la diferencia entre unir todas estas líneas (fijaciones) en un solo cuerpo, o colocar cada aparato en su propio cuerpo. ¿Hay una diferencia de rendimiento entre los dos métodos, o un método proporciona más funcionalidad o control sobre el otro método?

A continuación se muestra la diferencia entre ambos métodos.

Colocación de cada línea en un solo cuerpo:

// Create our body definition BodyDef groundBodyDef = new BodyDef(); groundBodyDef.type = BodyType.StaticBody; // Create a body from the defintion and add it to the world Body groundBody = world.createBody(groundBodyDef); for (int i = 0; i < 1000; i++) { // Create our line EdgeShape ground = new EdgeShape(); ground.set(x1, y1, x2, y2); groundBody.createFixture(ground, 0.0f); ground.dispose(); } 

Adjuntar cada línea a su propio cuerpo:

  // Create our body definition BodyDef groundBodyDef = new BodyDef(); groundBodyDef.type = BodyType.StaticBody; for (int i = 0; i < 1000; i++) { // Create a body from the defintion and add it to the world Body groundBody = world.createBody(groundBodyDef); // Create our line EdgeShape ground = new EdgeShape(); ground.set(x1, y1, x2, y2); groundBody.createFixture(ground, 0.0f); ground.dispose(); } 

Este ejemplo de código está específicamente en libGDX, sin embargo me imagino que este es un concepto bastante básico de box2D y podría ser contestado incluso sin experiencia libGDX.

Un ejemplo de una posible diferencia de funcionalidad es que si todas las líneas están unidas a un solo cuerpo y deberíamos llamar world.destroyBody(groundBody); , También destruiría todas las líneas, sin embargo, si cada línea se une a un cuerpo diferente, sólo destruiría una línea.

¿Incluso esto hace una diferencia sustancial? Simplemente podemos llamar a groundBody.destroyFixture(fixture); Para destruir una sola línea si están todos unidos a un solo cuerpo.

2 Solutions collect form web for “Múltiples montajes en un cuerpo o múltiples cuerpos?”

Del Manual de Box2D ( 7.3 Body Factory ):

Es más rápido adjuntar varias formas a un cuerpo estático que crear varios cuerpos estáticos con una sola forma en cada uno. Internamente, Box2D establece la masa y la masa inversa de los cuerpos estáticos a cero. Esto hace que las matemáticas funcionen de manera que la mayoría de los algoritmos no necesiten tratar los cuerpos estáticos como un caso especial.

De hecho, es más eficiente. ¿Es notorio? Depende, si usted tiene un montón de cuerpos con un accesorio y que los hacen accesorios de un solo cuerpo, pero probablemente no para la mayoría de los juegos.

Yo recomendaría que utilice el que es más fácil de implementar, y sólo lo hacen más performant cuando realmente lo necesita.

El uso de la memoria también puede ser algo a considerar.

Al menos en la versión C ++ de Box2D, cada cuerpo toma una cantidad fija de memoria al igual que hace cada aparato y cada forma lo hace. Así que asociar cada aparato con su propio cuerpo utilizará más memoria que la creación de múltiples accesorios dentro de un solo cuerpo. Se utilizará el mismo número de accesorios y formas en ambos casos, pero en el primer caso se utilizarán más cuerpos.

Para dar una idea de cuál es el consumo de memoria, el C + + b2Body utiliza 184 bytes de memoria en la plataforma de 64 bits que acabo de imprimir el resultado de sizeof(b2Body) .

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.