2017-07-04 93 views
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(); 
    } 
} 

回答

0

對不起在這裏浪費時間。我解決了這個問題。

這只是我沒有將地圖的比例也應用到矩形的x,y。所以我改變了這樣一條線,現在它的工作原理如下:

bdef.position.set(rect.getX() * mapScale + rect.getWidth()/2 * mapScale, rect.y * mapScale + rect.getHeight()/2 * mapScale);