Можно ли бесконечно создавать и удалять тела?

Я не хочу делать игру с бесконечной боковой прокруткой, используя libgdx и box2d, для этого мне придется создавать куски. В отличие от того, что было раньше, когда я имел дело только со спрайтами, я без проблем порождал спрайты бесконечное количество раз, объединяя и добавляя их в ArrayList и управляя ими с помощью итератора. Но теперь я использую статические тела, так как мой ландшафт и объединение не могут быть выполнены с телами, так что можно просто постоянно создавать новое тело и удалять его, когда оно не нужно. Это замедлит мою игру? если да, то как лучше? благодаря.

Обновление:

это мой текущий код, который не будет работать, потому что объединение не применимо к телам box2d. сначала я создал BodyDef и Body отдельными методами:

public BodyDef createDef(){
        BodyDef def = new BodyDef();
        def.type = BodyDef.BodyType.StaticBody;
        def.fixedRotation = true;
        def.position.set(6, 6);

        return(def);
    }

    public Body createBody(){
        Body body = world.createBody(createDef());
        PolygonShape shape = new PolygonShape();
        shape.setAsBox(1, 1);
        body.createFixture(shape, 1.0f);
        shape.dispose();

        return(body);
    }

 public void createPlatform(){
      Body platform = Pools.obtain(Body.class); //then use pooling
        platform = createBody(); //here I set the value equal to the return value of createBody() method 
        bodies.add(platform);//adding platform to the ArrayList
    }

Теперь моя новая идея состоит в том, чтобы просто создать новое тело, вызвав этот метод (создание тел никогда не закончится, потому что я пытаюсь сделать бесконечную игру с боковой прокруткой).

 public void createBody(){
            BodyDef def = new BodyDef();
            def.type = BodyDef.BodyType.StaticBody;
            def.postion.set(position.x, position.y);

            PolygonShape shape = new PolygonShape();
            shape.setAsBox(size.x, size.y);
            myBody = world.createBody(def, 1.0f);
            shape.dispose();
        } `//I'm still working on how to remove bodies`

person Kevin Bryan    schedule 09.11.2015    source источник
comment
Ваш вопрос совсем не ясен. Не могли бы вы перефразировать свой вопрос, расскажите нам конкретно, что вы пробовали, покажите нам код, который у вас есть сейчас. Мы не можем просто догадаться, как выглядит ваш код или что вы уже сделали, без надлежащего разъяснения.   -  person Tschallacka    schedule 09.11.2015
comment
Мы не можем сказать, замедлит ли что-то, что вы делаете, вашу игру. У нас нет вашей игры.   -  person khelwood    schedule 09.11.2015
comment
Пожалуйста, проверьте мое обновление и извините.   -  person Kevin Bryan    schedule 09.11.2015
comment
Я не понимаю, почему тела не объединяются. Почему вы делаете такое предположение?   -  person Tenfour04    schedule 10.11.2015
comment
потому что я получаю ошибки? а еще кто-то сказал мне, что тела всегда должны быть инициализированы вот так //Body body = wold,createBody(def);   -  person Kevin Bryan    schedule 10.11.2015
comment
для других людей, сталкивающихся с этим вопросом - javadoc для определения тела   -  person eis    schedule 10.11.2015
comment
вероятно, лучшее, что можно сделать, это протестировать его. Теоретически, пока ваша сборка мусора может работать, у вас не должно быть проблем.   -  person Marshall Tigerus    schedule 10.11.2015
comment
Я попробую, вы знаете, как правильно создавать чанки? даже ссылка на учебник была бы полезна, я новичок в этом, у меня все еще нет правильного понимания фрагментов.   -  person Kevin Bryan    schedule 10.11.2015
comment
Чанк — это просто созданная часть вашего мира, которая может максимально плавно стыковаться с другими фрагментами. В майнкрафте каждый блок можно рассматривать как фрагмент, который был сгенерирован внутри более крупных фрагментов, которые не очень хорошо сочетаются друг с другом. (Пустыня рядом со снегом) — другими словами, вы можете просто случайным образом генерировать вещи и соединять их вместе, чтобы квалифицировать как куски.   -  person DoubleDouble    schedule 10.11.2015
comment
Если тела идентичны, то они определенно объединяются. Вам нужно будет использовать setTransform, чтобы переместить тела из левой части экрана в правую.   -  person DylanVann    schedule 10.11.2015
comment
При этом создание новых тел — это простой способ, просто убедитесь, что вы удалили тела, идущие с левой стороны, и обязательно профилируйте, чтобы убедиться, что создание новых тел не слишком сильно отстает от вашей игры.   -  person DylanVann    schedule 10.11.2015


Ответы (2)


да. Можно бесконечно создавать и удалять тела.

В зависимости от того, сколько тел вы создаете за раз, задействованное распределение и сборка мусора могут в конечном итоге отставать от вашей игры.

Если ваша игра в конечном итоге зависает, вам нужно переключиться на использование пула. Вы можете использовать setTransform для перемещения тел box2d из левой части экрана в правую.

person DylanVann    schedule 10.11.2015

DylanVann уже ответил на вопрос, но я просто хочу отметить, что вместо создания новых объектов BodyDef и Shape вы даже можете использовать это повторно.

Сохраняйте ссылку на BodyDef и даже на форму, если вы слишком часто создаете и уничтожаете формы (например, 3-4 раза в секунду).

 public void createBody(){
        def.type = BodyDef.BodyType.StaticBody;
        def.postion.set(position.x, position.y);

        shape.setAsBox(size.x, size.y);
        myBody = world.createBody(def, 1.0f);
 }
person Kush    schedule 21.11.2015