【发布时间】:2015-11-09 15:45:42
【问题描述】:
我不想使用 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`
【问题讨论】:
-
你的问题很清楚。您能否重述您的问题,具体告诉我们您尝试了什么,向我们展示您现在拥有的代码。如果没有适当的说明,我们不能简单地“猜测”你的代码是什么样子或者你到目前为止做了什么。
-
我们无法判断您所做的某事是否会减慢您的游戏速度。我们没有你的游戏。
-
请检查我的更新并抱歉。
-
我不明白为什么尸体不可合并。你为什么要做出这样的假设?
-
因为我遇到了错误?还有人告诉我,body 应该总是像这样初始化 //Body body = wold,createBody(def);