Java 使用Box2Body数组在不同时间创建同一实体的多个

Java 使用Box2Body数组在不同时间创建同一实体的多个,java,arrays,libgdx,Java,Arrays,Libgdx,我目前正在制作我的第一个libgdx游戏,我不知道如何在libgdx/box2d的上下文中正确使用数组。我的目标是创建一组相同但在不同时间生成的Box2Body。随着时间的推移,这将使比赛变得更加困难 我在网上查看了如何做到这一点,最相关的搜索结果是用C++编写的,同时也在生成一组100个体。我使用了一个转换器将其更改为Java,并更改了代码,使其符合我的要求。我最终设法让它工作,但现在我有一个问题,我的一个方法本质上是在一个新的随机位置将对象重新放置到屏幕的另一侧,但不幸的是,我不知道如何将其

我目前正在制作我的第一个libgdx游戏,我不知道如何在libgdx/box2d的上下文中正确使用数组。我的目标是创建一组相同但在不同时间生成的Box2Body。随着时间的推移,这将使比赛变得更加困难

我在网上查看了如何做到这一点,最相关的搜索结果是用C++编写的,同时也在生成一组100个体。我使用了一个转换器将其更改为Java,并更改了代码,使其符合我的要求。我最终设法让它工作,但现在我有一个问题,我的一个方法本质上是在一个新的随机位置将对象重新放置到屏幕的另一侧,但不幸的是,我不知道如何将其应用到刚刚创建的b2body

TLDR;我需要帮助来修复我的数组代码,使Respawn()方法能够工作,和/或完全重写我的数组,使其符合我的意图。非常感谢您的帮助

我的阵列:

Shape[] objects = new PolygonShape[4];
Body[] bBody = new Body[4];
我如何定义我的身体:

private Body[] makeObstacle(World world, BodyDef.BodyType type, PolygonShape shape) {

    BodyDef bdef = new BodyDef();
    bdef.type = type;
    bdef.position.set(7, randomYPos);
    Body body = world.createBody(bdef);


    body.setLinearVelocity(-4, 0);

    shape = new PolygonShape();

    shape.setAsBox(60 / RadiationPigeon.PPM, 25 / RadiationPigeon.PPM);

    FixtureDef fdef = new FixtureDef();
    fdef.shape = shape;


    body.createFixture(fdef);


    return new Body[]{body}
}
下面是我如何繁殖身体的:

public void bodies(){

    if(!alreadyExecuted){

        if(DistanceM == 10 && DistanceC == 0) {
            bBody = makeObstacle(world, BodyDef.BodyType.KinematicBody, (PolygonShape) objects[2]);
            alreadyExecuted = true;
        }
    }

}
if(DistanceM == 10 && DistanceC == 0) {
            bBody[0] = makeObstacle(world, BodyDef.BodyType.KinematicBody);
            alreadyExecuted = true;
        }
下面是我的Respawn()方法:

private void Respawn(){

if(bBody[2].getPosition().x您的respawn方法调用数组中的第三个对象
bBody
此处:
bBody[2]
。我认为空指针是空数组位置。请尝试添加一个catch来检查对象是否为空,如下所示:

if (bBody[2] == null) {
    System.out.println("It doesn't exist!");
} else {

    if(bBody[2].getPosition().x <= -3){
        minWorldY = pigeoncam.position.y - pigeoncam.viewportHeight/2;
        maxWorldY = pigeoncam.position.y + pigeoncam.viewportHeight/2;
        randomYPos =  MathUtils.random(minWorldY, maxWorldY);
        bBody[2].setTransform(7, randomYPos, 0);

    }
}
if(bBody[2]==null){
System.out.println(“它不存在!”);
}否则{

如果(bBoo[2).GePosithSo.](xP>)由于缺少java数组的知识,上面的体代码来自C++代码块,我的代码完全错误,在正确学习数组之后,我设法修复了:

更改makeBarriend()方法以返回一个body并删除“objects”数组:

private Body makeObstacle(World world, BodyDef.BodyType type) {

    BodyDef bdef = new BodyDef();
    bdef.type = type;
    bdef.position.set(7, randomYPos);
    Body body = world.createBody(bdef);


    body.setLinearVelocity(-4, 0);

    PolygonShape shape = new PolygonShape();

    shape.setAsBox(60 / RadiationPigeon.PPM, 25 / RadiationPigeon.PPM);

    FixtureDef fdef = new FixtureDef();
    fdef.shape = shape;


    body.createFixture(fdef);

    return body;
}
定义要接收主体的B主体:

public void bodies(){

    if(!alreadyExecuted){

        if(DistanceM == 10 && DistanceC == 0) {
            bBody = makeObstacle(world, BodyDef.BodyType.KinematicBody, (PolygonShape) objects[2]);
            alreadyExecuted = true;
        }
    }

}
if(DistanceM == 10 && DistanceC == 0) {
            bBody[0] = makeObstacle(world, BodyDef.BodyType.KinematicBody);
            alreadyExecuted = true;
        }
使我的Respawn()方法检查创建的bBody是否为null

 private void Respawn(){
    if(bBody[0] != null && bBody[0].getPosition().x <= -3){

        minWorldY = pigeoncam.position.y - pigeoncam.viewportHeight/2;
        maxWorldY = pigeoncam.position.y + pigeoncam.viewportHeight/2;
        randomYPos =  MathUtils.random(minWorldY, maxWorldY);
        bBody[0].setTransform(7, randomYPos, 0);

    }
}
private void Respawn(){

if(bBody[0]!=null&&bBody[0].getPosition().x无意冒犯,但我不确定你是否了解数组的工作原理。有一个关于khanacademy的很好的教程。只是想提供帮助!你的问题需要更多关于方法在何处以及如何使用的细节。@TheChubbyPanda你完全正确,我现在正在制作我的第一个游戏,我以前从未使用过数组。(除了在学习java语法时制作杂货清单之外)我从C++用户代码中得到了大部分代码,在这种情况下,你可能不应该马上做游戏。尝试一些更简单的方法。这样你就能提高你的核心技能。我设法解决了这个问题,我只是不知道数组是如何正确工作的,我的坏。我抄袭的唯一代码是用数组做的,所以我现在都很好。