首页 > 解决方案 > Java LibGDX:Tiledmap 不在顶部和右侧呈现

问题描述

我试图让一个平铺地图在整个屏幕上呈现。问题是顶部或右侧 100px,那里的一切都是黑色的。我的 tiledmap 大约有 100 个图块,所以它应该能够渲染比它渲染的更多。

这是它现在的样子: 我现在的游戏

1:和我一样,这个栏是预期的,目前,那里没有任何东西可以渲染。

2 & 3:这些条是出乎意料的,因为我的平铺地图有更多部分要在那里渲染。

我已经尝试将我的视口从 StretchViewport 更改为 FitViewport 以及 FillViewport,但这并没有改变任何东西。

这是我在 PlayScreen 类中的构造函数:

    public Play(GameStateManager gsm) {
       super(gsm);

       //set up box2d
       world = new World(new Vector2(0, -20.81f), true);
       cl = new MyContactListener();
       world.setContactListener(cl);
       b2dr = new Box2DDebugRenderer();

       //set up viewport
       vw = new StretchViewport(1280, 720, cam);
       cam.update();

       //create player
       createPlayer();

       //create tiles
       createTiles();

       //setup box2D cam
       b2dCam = new OrthographicCamera();
       b2dCam.setToOrtho(false, Game.V_WIDTH / PPM, Game.V_HEIGHT / PPM);
    }

这是我的 createTiles() 方法:

    private void createTiles(){
        loader = new TmxMapLoader();

        tileMap = loader.load("data/lvl1.tmx");
        tmr = new OrthogonalTiledMapRenderer(tileMap);
        cam.update();

        //get the size of the tiles
        tileSize = tileMap.getProperties().get("tilewidth", Integer.class);

        //create box2d bodies for all tiledmap layers
        TiledMapTileLayer layer;

        layer = (TiledMapTileLayer) tileMap.getLayers().get("red");
        createLayer(layer, B2DVars.BIT_RED);

        layer = (TiledMapTileLayer) tileMap.getLayers().get("orange");
        createLayer(layer, B2DVars.BIT_ORANGE);

        layer = (TiledMapTileLayer) tileMap.getLayers().get("yellow");
        createLayer(layer, B2DVars.BIT_YELLOW);

        layer = (TiledMapTileLayer) tileMap.getLayers().get("green");
        createLayer(layer, B2DVars.BIT_GREEN);

        layer = (TiledMapTileLayer) tileMap.getLayers().get("blue");
        createLayer(layer, B2DVars.BIT_BLUE);

        layer = (TiledMapTileLayer) tileMap.getLayers().get("pink");
        createLayer(layer, B2DVars.BIT_PINK);
    }

渲染()方法:

    public void render(float delta) {
     //clear screen
     Gdx.gl.glClearColor(0.619607843f, 0.79607843137f, 1, 1);
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

     //set cam to follow player
     cam.position.set(
          player.getPosition().x * PPM + Game.V_WIDTH / 4,
          Game.V_HEIGHT / 2, 
          0
     );

     //draw tile map
     tmr.setView(cam);
     tmr.render();

     //draw player
     sb.setProjectionMatrix(cam.combined);
     player.render(sb);

     //draw box2d world
     b2dr.render(world, b2dCam.combined);

     //responsive resizing
     resize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
}

这是我的主游戏类中的 create() 方法:

    public void create () {
    Gdx.input.setInputProcessor(new MyInputProcessor());

    //asset managing
    res = new Content();
    res.loadTexture("data/player/player.png", "player");

    sb = new SpriteBatch();
    cam = new OrthographicCamera();
    cam.setToOrtho(false, V_WIDTH, V_HEIGHT);
    hudCam = new OrthographicCamera();
    hudCam.setToOrtho(false, V_WIDTH, V_HEIGHT);
    gsm = new GameStateManager(this);
}

我没想到这个游戏会得到那些黑条,我之前创造了其他游戏,他们从来没有得到那些。如何删除它们(图像上的 2 和 3)?

标签: javalibgdxviewport

解决方案


推荐阅读