可以无限创建和删除实体吗?

Is it ok to create and delete bodies infinitely?

我不想使用 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
    }

我现在的新想法就是调用这个方法创建一个新的body(创建body永远不会结束,因为我想做一个无限横版的游戏)

 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`

是的。可以无限期地创建和删除实体。

根据您一次创建的主体数量,所涉及的分配和垃圾收集最终可能会滞后于您的游戏。

如果您的游戏最终确实滞后,您需要切换到使用池化。您可以使用 setTransform 将 box2d 实体从屏幕左侧移动到右侧。

DylanVann 已经回答了这个问题,但我只想指出该函数不是创建新的 BodyDef 和 Shape 对象,您甚至可以重用它们。

如果您过于频繁地创建和销毁形状(例如每秒 3-4 次),请保持 BodyDef 甚至 Shape 的引用。

 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);
 }