0
我正在重新訪問LibGDX遊戲編程,我不幸要重新學習我以前知道的東西。LibGDX/Box2d - 只有一個矩形正在由debugrenderer渲染
我目前使用平鋪地圖編輯器來創建一個非常簡單的金剛風格級別。我的水平總共有20個矩形。
我在我的主GameScreen類中創建了一個box2d世界,並有一個for循環讓矩形對象進入世界和調試顯示器。
我的問題是隻有底部(和第一)矩形我畫了出來。我已經檢查了比例尺,我還放了一個println()
,它告訴我所有的矩形信息都顯示正確(即矩形x,y,w,h值)的解析對象信息,但正如我所說,只有一個矩形顯示在debugrenderer上。
我剛剛在6個月的休息時間後回到編程,所以我希望我錯過了一些簡單的事情。我的舊項目中的相同代碼仍然正常工作,因爲我測試了一些。
這是我的代碼,任何幫助是大量讚賞。謝謝
public class GameScreen implements Screen {
SpriteBatch spriteBatch;
OrthographicCamera cam;
Viewport v;
TmxMapLoader mapLoader;
TiledMap map;
OrthogonalTiledMapRenderer mapRenderer;
World world;
Box2DDebugRenderer b2dr;
float mapScale = 10f/140f;
public GameScreen(){
spriteBatch = new SpriteBatch();
cam = new OrthographicCamera();
v = new FitViewport(Constants.V_WIDTH, Constants.V_HEIGHT, cam);
cam.setToOrtho(false, v.getWorldWidth(), v.getWorldHeight());
mapLoader = new TmxMapLoader();
map = mapLoader.load("level1.tmx");
mapRenderer = new OrthogonalTiledMapRenderer(map, mapScale);
world = new World(new Vector2(0,-9.8f), true);
b2dr = new Box2DDebugRenderer();
// box2d local variables
BodyDef bdef = new BodyDef();
PolygonShape shape = new PolygonShape();
FixtureDef fdef = new FixtureDef();
Body body;
// create platform object rectangles
for (MapObject object : map.getLayers().get(2).getObjects().getByType(RectangleMapObject.class)){
Rectangle rect = ((RectangleMapObject)object).getRectangle();
bdef.type = BodyDef.BodyType.StaticBody;
bdef.position.set(rect.getX() + rect.getWidth()/2 * mapScale, rect.y + rect.getHeight()/2 * mapScale);
body = world.createBody(bdef);
shape.setAsBox(rect.getWidth()/2 * mapScale, rect.getHeight()/2 * mapScale);
fdef.shape = shape;
body.createFixture(fdef);
}
}
@Override
public void show() {
}
@Override
public void render(float delta) {
update(delta);
clearScreen();
draw();
}
public void update(float dt){
mapRenderer.setView(cam);
}
public void clearScreen(){
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
}
public void draw(){
spriteBatch.setProjectionMatrix(cam.combined);
mapRenderer.render();
b2dr.render(world, cam.combined);
spriteBatch.begin();
spriteBatch.end();
}
@Override
public void resize(int width, int height) {
v.update(width, height);
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void hide() {
}
@Override
public void dispose() {
spriteBatch.dispose();
}
}