Java tutorial
/******************************************************************************* * Copyright 2013 See AUTHORS file. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package com.badlogic.gdx.maps.tiled.renderers; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.maps.MapLayer; import com.badlogic.gdx.maps.MapObject; import com.badlogic.gdx.maps.tiled.TiledMap; import com.badlogic.gdx.maps.tiled.TiledMapRenderer; import com.badlogic.gdx.maps.tiled.TiledMapTileLayer; import com.badlogic.gdx.maps.tiled.tiles.AnimatedTiledMapTile; import com.badlogic.gdx.math.Matrix4; import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.utils.Disposable; public abstract class BatchTiledMapRenderer implements TiledMapRenderer, Disposable { protected TiledMap map; protected float unitScale; protected Batch batch; protected Rectangle viewBounds; protected boolean ownsBatch; protected float vertices[] = new float[20]; public TiledMap getMap() { return map; } public void setMap(TiledMap map) { this.map = map; } public float getUnitScale() { return unitScale; } public Batch getBatch() { return batch; } public Rectangle getViewBounds() { return viewBounds; } public BatchTiledMapRenderer(TiledMap map) { this(map, 1.0f); } public BatchTiledMapRenderer(TiledMap map, float unitScale) { this.map = map; this.unitScale = unitScale; this.viewBounds = new Rectangle(); this.batch = new SpriteBatch(); this.ownsBatch = true; } public BatchTiledMapRenderer(TiledMap map, Batch batch) { this(map, 1.0f, batch); } public BatchTiledMapRenderer(TiledMap map, float unitScale, Batch batch) { this.map = map; this.unitScale = unitScale; this.viewBounds = new Rectangle(); this.batch = batch; this.ownsBatch = false; } @Override public void setView(OrthographicCamera camera) { batch.setProjectionMatrix(camera.combined); float width = camera.viewportWidth * camera.zoom; float height = camera.viewportHeight * camera.zoom; viewBounds.set(camera.position.x - width / 2, camera.position.y - height / 2, width, height); } @Override public void setView(Matrix4 projection, float x, float y, float width, float height) { batch.setProjectionMatrix(projection); viewBounds.set(x, y, width, height); } @Override public void render() { beginRender(); for (MapLayer layer : map.getLayers()) { if (layer.isVisible()) { if (layer instanceof TiledMapTileLayer) { renderTileLayer((TiledMapTileLayer) layer); } else { renderObjects(layer); } } } endRender(); } @Override public void render(int[] layers) { beginRender(); for (int layerIdx : layers) { MapLayer layer = map.getLayers().get(layerIdx); if (layer.isVisible()) { if (layer instanceof TiledMapTileLayer) { renderTileLayer((TiledMapTileLayer) layer); } else { renderObjects(layer); } } } endRender(); } @Override public void renderObjects(MapLayer layer) { for (MapObject object : layer.getObjects()) { renderObject(object); } } @Override public void renderObject(MapObject object) { } /** Called before the rendering of all layers starts. */ protected void beginRender() { AnimatedTiledMapTile.updateAnimationBaseTime(); batch.begin(); } /** Called after the rendering of all layers ended. */ protected void endRender() { batch.end(); } @Override public void dispose() { if (ownsBatch) { batch.dispose(); } } }