gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:11:11 26 4
gpt4 key购买 nike

我不想使用 libgdx 和 box2d 制作无限横向滚动游戏,为此我必须生成 block 。与以前不同的是,当我只处理 Sprite 时,我通过池化并将它们添加到 ArrayList 并使用迭代器控制它们,可以无限次地生成 Sprite ,而不会出现任何问题。但现在我使用静态物体,因为我的地形和池不能用物体完成,所以可以一直创建一个新物体并在不需要时删除它们吗?它会减慢我的游戏速度吗?如果是这样,什么是更好的方法?谢谢。

更新:

这是我当前的代码,它不会工作,因为池不适用于 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`

最佳答案

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

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

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

关于java - 可以无限地创建和删除实体吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33612840/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com