我不想使用libgdx和box2d制作一个无限的侧滚动游戏,为此我必须生成块。与之前我刚刚处理sprite时不同,我曾经无限次地生成sprite,没有问题,可以通过池化并将它们添加到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`
答案 0 :(得分:2)
是。可以无限期地创建和删除主体。
根据您一次创建的身体数量,所涉及的分配和垃圾收集可能会最终落后于您的游戏。
如果您的游戏最终落后于您,则需要切换到使用池。您可以使用setTransform将box2d实体从屏幕左侧移动到右侧。
答案 1 :(得分:0)
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);
}