In Play class I have the viewport of game height=320 and game width=240unitswith camera cam. I have set the camera(cam) viewport width to 10 and viewport height to 7.I have another camera hud whose viewport width is game width and viewport height is game height. In render method, I have set Spritebatch to a projection matrix of hud.combined.


 import com.mygdx.manager.GameStateManager;
 import com.mygdx.manager.MyContactListener;
 import com.mygdx.manager.MyInput;
 
 
 
 
 import static com.mygdx.manager.Box2DVariables.BIT_PLAYER;
 import static com.mygdx.manager.Box2DVariables.PPM;
 
 
 
 public class Play extends GameState{
 
 
 private World world;
 
 
 private Player player;
 
 
 private Box2DDebugRenderer b2d;
 private OrthographicCamera B2DCAM;
 private TiledMap tileMap;
 private OrthogonalTiledMapRenderer orthomap;
 private MyContactListener cl;
 private float tileSize;
 private Sprite sprite;
 private Viewport viewport;
 
 private Texture back;
 
 
 
 //file name
 private final String LEVEL_1 ="maps/tilemap_1.tmx";
 
 public Play(GameStateManager gsm) {
 super(gsm);
 
 
 //setup box2d
 world=new World(new Vector2(0,-9.8f),true);
 cl=new MyContactListener();
 world.setContactListener(cl);
 sb=new SpriteBatch();
 viewport = new ExtendViewport(MyMainGame.Width, MyMainGame.Height, cam);
 // sprite=new Sprite(MyMainGame.con.getTexture("sprite"),32,32);
 //cam=new OrthographicCamera();
 
 b2d=new Box2DDebugRenderer();
 
 //create Player
 createPlayer();
 //create Tiles
 createTiles();
 orthomap = new OrthogonalTiledMapRenderer(tileMap,1/32f);
 // sb=new SpriteBatch();
 
 
 //setup Box2D Cam
 B2DCAM=new OrthographicCamera();
 B2DCAM.setToOrtho(false, MyMainGame.Width/PPM,MyMainGame.Height/PPM);
 //setup hud and cam
 hud=new OrthographicCamera();
 cam=new OrthographicCamera();
 cam.setToOrtho(false,10,7);
 hud.setToOrtho(false,MyMainGame.Width,MyMainGame.Height);
 
 
 
 
 
 
 
 
 
 
 
 
 
 /* //TODO - remove me
 File file = new File(LEVEL_1);
 if(file.exists())
 System.out.println("file exists");*/
 
 
 }
 
 
 @Override
 public void init() {
 
 }
 
 @Override
 public void update(float dt) {
 handleInput();
 
 world.step(dt,6,2);
 player.update(dt);
 
 }
 
 @Override
 public void draw() {
 
 }
 
 @Override
 public void render() {
 
 //clear screen
 
 Gdx.gl20.glClear(GL20.GL_COLOR_BUFFER_BIT);
 
 
 
 
 
 
 hud.update();
 
 
 if (sb == null) {
 System.out.println("Sb is null");
 }
 // cam.position.set(player.getPosition().x,player.getPosition().y,0 );
 sb.setProjectionMatrix(cam.combined);
 
 
 
 
 
 
 //draw tile map
 orthomap.setView(cam);
 orthomap.render();
 //draw player
 sb.setProjectionMatrix(hud.combined);
 
 player.render(sb);
 
 b2d.render(world,B2DCAM.combined);
 
 
 
 
 }
 
 @Override
 public void handleInput() {
 if(MyInput.isPressed((MyInput.SPACE))){
 System.out.println("space pressed");
 if(cl.isPlayerOnGround())
 System.out.println(cl.isPlayerOnGround());
 player.getBody().applyForceToCenter(0,200,true);
 }
 }
 
 
 @Override
 public void dispose() {
 world.dispose();
 b2d.dispose();
 tileMap.dispose();
 orthomap.dispose();
 }
 
 private void createPlayer(){
 BodyDef bodydef=new BodyDef();
 FixtureDef fixdef=new FixtureDef();
 PolygonShape shape=new PolygonShape();
 
 
 //create player
 bodydef.position.set(60/PPM,200/PPM);
 bodydef.type= BodyDef.BodyType.DynamicBody;
 //
 bodydef.linearVelocity.set(1,0);
 Body body=world.createBody(bodydef);
 
 shape.setAsBox(13/PPM,13/PPM);
 fixdef.shape=shape;
 fixdef.filter.categoryBits= BIT_PLAYER;
 fixdef.filter.maskBits=Box2DVariables.BIT_BLUE;
 // fixdef.filter.maskBits=Box2DVariables.BIT_GREEN;
 body.createFixture(fixdef).setUserData("PLAYER");
 
 
 //create foot sensor
 shape.setAsBox(13/PPM,2/PPM,new Vector2(0,-13/PPM),0);
 fixdef.shape=shape;
 fixdef.filter.categoryBits= BIT_PLAYER;
 fixdef.filter.maskBits=Box2DVariables.BIT_BLUE;
 // fixdef.filter.maskBits=Box2DVariables.BIT_GREEN;
 fixdef.isSensor=true;
 body.createFixture(fixdef).setUserData("FOOT");
 
 //create Player
 player=new Player(body);
 body.setUserData(player);
 }
 private void createTiles(){
 //load tile map
 tileMap = new TmxMapLoader().load(LEVEL_1);
 //orthomap = new OrthogonalTiledMapRenderer(tileMap,1);
 
 
 tileSize=(int)tileMap.getProperties().get("tilewidth", Integer.class);
 System.out.println("Tile Size " +tileSize);
 
 TiledMapTileLayer layer;
 
 layer=(TiledMapTileLayer)tileMap.getLayers().get("Blue");
 createLayer(layer,Box2DVariables.BIT_BLUE);
 layer=(TiledMapTileLayer)tileMap.getLayers().get("Green");
 createLayer(layer,Box2DVariables.BIT_GREEN);
 layer=(TiledMapTileLayer)tileMap.getLayers().get("Red");
 createLayer(layer,Box2DVariables.BIT_RED);
 System.out.println("Layer Height " +layer.getHeight());
 System.out.println("Layer Width " +layer.getWidth());
 }
 private void createLayer(TiledMapTileLayer layer,short bits){
 BodyDef bodydef1=new BodyDef();
 FixtureDef fixdef1=new FixtureDef();
 
 //go through cells in layer
 for(int row=0;row<layer.getHeight();row++){
 for(int col=0;col<layer.getWidth();col++){
 //get cells
 TiledMapTileLayer.Cell cell=layer.getCell(col,row);
 
 //check if cell exists
 if(cell==null) continue;
 if(cell.getTile()==null) continue;
 
 //create body and fixture from cell
 bodydef1.type= BodyDef.BodyType.StaticBody;
 bodydef1.position.set((col+0.5f)*tileSize/PPM,(row+0.5f)*tileSize/PPM);
 ChainShape cs=new ChainShape();
 Vector2[] v=new Vector2[3];
 //bottom left
 v[0]=new Vector2(-tileSize/2/PPM,-tileSize/2/PPM);
 //top left
 v[1]=new Vector2(-tileSize/2/PPM,tileSize/2/PPM);
 //top right corner
 v[2]=new Vector2(tileSize/2/PPM,tileSize/2/PPM);
 
 
 cs.createChain(v);
 fixdef1.friction=0;
 fixdef1.shape =cs;
 fixdef1.filter.categoryBits=bits;
 fixdef1.filter.maskBits=BIT_PLAYER;
 fixdef1.isSensor=false;
 world.createBody(bodydef1).createFixture(fixdef1);
 
 }
 }
 }
 }

I want the camera to follow the player. I have tried this

 cam.position.set(player.getPosition().x,player.getPosition().y,0);