我目前正在制作我的第一個 libgdx 游戲,但我不確定如何在 libgdx/box2d 的上下文中正確使用數(shù)組。我的目標(biāo)是創(chuàng)建一組相同但在不同時間生成的 box2dbody。隨著時間的推移,這樣做會使游戲變得更加困難。我在網(wǎng)上查看了如何做到這一點,最相關(guān)的搜索結(jié)果是用 C++ 編寫的,并且是關(guān)于同時生成 100 個主體的組。我使用轉(zhuǎn)換器將其更改為 Java 并更改了代碼,使其適合我想要的。我最終設(shè)法讓它工作,但現(xiàn)在我遇到了問題,我的一個方法基本上是在新的隨機(jī)位置將對象重新生成到屏幕的另一側(cè),但不幸的是我不知道如何將它應(yīng)用于 b2body那是剛剛創(chuàng)建的。TLDR;我需要幫助修復(fù)我的數(shù)組代碼,以便我的 Respawn() 方法工作,和/或完全修改我的數(shù)組,以便它按照我的意圖工作。任何幫助是極大的贊賞!我的陣列: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); }}使用上面的代碼給出了關(guān)于 respawn() 方法的空對象引用錯誤
2 回答

PIPIONE
TA貢獻(xiàn)1829條經(jīng)驗 獲得超9個贊
你重生方法調(diào)用數(shù)組中的第三個對象bBody在這里:bBody[2]。我想象空指針是空數(shù)組位置。嘗試添加一個 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);
}
}
如果控制臺顯示:“它不存在!”,則說明您尚未將主體放入該位置的數(shù)組中。從它的外觀來看,您只是填充了數(shù)組的第一個位置。
添加回答
舉報
0/150
提交
取消