为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Box2dbody 数组在不同时间创建多个相同的 Body

使用 Box2dbody 数组在不同时间创建多个相同的 Body

潇湘沐 2021-05-31 17:01:11
我目前正在制作我的第一个 libgdx 游戏,但我不确定如何在 libgdx/box2d 的上下文中正确使用数组。我的目标是创建一组相同但在不同时间生成的 box2dbody。随着时间的推移,这样做会使游戏变得更加困难。我在网上查看了如何做到这一点,最相关的搜索结果是用 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;        }    }}这是我的 Respawn() 方法:private void Respawn(){    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);    }}使用上面的代码给出了关于 respawn() 方法的空对象引用错误
查看完整描述

2 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

你重生方法调用数组中的第三个对象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);


    }

}

如果控制台显示:“它不存在!”,则说明您尚未将主体放入该位置的数组中。从它的外观来看,您只是填充了数组的第一个位置。


查看完整回答
反对 回复 2021-06-02
  • 2 回答
  • 0 关注
  • 136 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信