Скажем, я хотел создать 1000 или даже 5000 статических линий тела на экране. Мне интересно, какова разница между прикреплением всех этих линий (светильников) к одному телу или размещением каждого приспособления на его собственном теле. Существует ли разница в производительности между этими двумя методами или один метод обеспечивает большую функциональность или контроль над другим методом?
Ниже показано различие между обоими методами.
Прикрепление каждой строки к одному телу:
// 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();
}
Прикрепление каждой строки к собственному телу:
// 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();
}
Этот пример кода определенно в libGDX, однако я предполагаю, что это довольно простая концепция box2D, и на него можно ответить даже без опыта работы с libGDX.
Одним из примеров возможной разницы в функциональности является то, что если все строки привязаны к одному телу, и мы должны были бы вызвать world.destroyBody(groundBody);
, это также уничтожило бы все строки, однако, если каждая строка привязана к другому тело, мы уничтожим только одну строку.
Разве даже это имеет существенное значение? Мы можем просто вызвать groundBody.destroyFixture(fixture);
, чтобы уничтожить одну строку, если все они прикреплены к одному телу.