Home Game Development libgdx – Rendering Tilemap Tile Layer Side by Side for Infinite/Endless Runner Game

libgdx – Rendering Tilemap Tile Layer Side by Side for Infinite/Endless Runner Game

0
libgdx – Rendering Tilemap Tile Layer Side by Side for Infinite/Endless Runner Game

[ad_1]

I used to be strugeling this for days find out how to implement tilemap into libgdx and box2d with infinite/limitless scheme. I can load a single map and show every thing on display screen. But putting 2 or extra tilemap aspect by aspect bought me headache. I do know presently not doable to offset/add x worth place of tilemap. What I do proper now’s use setview for digital camera of it is render methodology. This is my map helper and presently I works with 3 renderer for 3 tilemap as a check…

public class MapHelper {
personal Array<OrthogonalTiledMapRenderer> renderer = new Array<OrthogonalTiledMapRenderer>();
personal int quantity;
personal float oldDistance, currentDistance;
personal String layer = "world";

public MapHelper(Callback callback) {
    this.callback = callback;
    quantity = 0;
    merchandise = new ItemMap[3];
}

public void render(CamHandler cam) {
    for(int r = 0; r < renderer.dimension; r++) {
        if(merchandise[r] != null) {
            renderer.get(r).setView(cam.getCam().mixed, merchandise[r].distance, 0, merchandise[r].getWidth(), merchandise[r].getHeight());
            renderer.get(r).render();
        }
    }
}

public void updateMap(CamHandler cam) {
    if(mapOut(cam)) {
        quantity++;
        if(quantity > 2)
            quantity = 0;
        loadMap(quantity);
    }
}

/**
 * Check if digital camera attain the present distance, then construct new map
 * @param cam
 * @return
 */
personal boolean mapOut(CamHandler cam) {
    float x = cam.getCam().place.x + cam.getCam().viewportWidth / 2;
    Utils.log("pos cam x "+x+" present distance "+currentDistance);
    return x >= currentDistance;
}

personal void loadMap(int map) {
    AssetsManager.loadMap(map);
    if(merchandise[map] != null) {
        renderer.set(map, new OrthogonalTiledMapRenderer(AssetsManager.map));
        merchandise[map].set(TileHelper.getMapWidth(AssetsManager.map, layer), TileHelper.getMapHeight(AssetsManager.map, layer), currentDistance);
    } else {
        renderer.add(new OrthogonalTiledMapRenderer(AssetsManager.map));
        merchandise[map] = new ItemMap(TileHelper.getMapWidth(AssetsManager.map, layer), TileHelper.getMapHeight(AssetsManager.map, layer), currentDistance);
    }

    oldDistance = currentDistance;
    currentDistance += TileHelper.getMapWidth(AssetsManager.map, layer);
    callback.onLoad();
    Utils.log("load new map "+map+" distance "+currentDistance);
}

public Array<OrthogonalTiledMapRenderer> getRenderer() {
    return renderer;
}

public Array<Body> getBodies(World world) {
    return new MapBodyBuilder().buildShapes(AssetsManager.map, world, oldDistance);
}

personal ItemMap[] merchandise;

personal class ItemMap {
    personal float distance, mapWidth, mapHeight;

    ItemMap(float w, float h, float distance) {
        mapWidth = w;
        mapHeight = h;
        this.distance = distance;
    }

    personal void set(float mapWidth, float mapHeight, float distance) {
        this.mapWidth = mapWidth;
        this.mapHeight = mapHeight;
        this.distance = distance;
    }

    personal float getWidth() {
        return mapWidth * Constants.WORLD_TO_SCREEN;
    }

    personal float getHeight() {
        return mapHeight * Constants.WORLD_TO_SCREEN;
    }
}

personal Callback callback;

public interface Callback {
    void onLoad();
}

public void startOver() {
    clear();
    currentDistance = quantity = 0;
    loadMap(quantity);
}

personal void clear() {
    for (OrthogonalTiledMapRenderer render : renderer) {
        render.dispose();
    }
}

}

With above class, I can show and cargo new map on display screen when digital camera reaching the map finish. But the tile layer texture retains fallacious place. Please give me an recommendation.

[ad_2]

LEAVE A REPLY

Please enter your comment!
Please enter your name here