Skip to content

Rotating Canvas Games

Menu
  • Games
    • Balloon Shooter
    • Choozak
    • Polar
    • Tap Shoot Zombie!
    • Speedboat Santa
    • Rapid Car Rush
    • Turtle Leap
    • Crossword
  • HTML5 Games
    • Speedboat Santa HTML5
    • Choozak HTML5
  • Blog
  • Tutorials Index
  • About Us
  • Contact Us
  • Privacy Policy & Terms and Conditions
    • Privacy Policy
    • Terms and Conditions
    • Copyright Notice
    • Disclaimer
Menu

Game Development in Android using Libgdx Part IV

Posted on February 14, 2012December 4, 2023 by Rahul Srivastava

In this tutorial we would be creating two classes. One, the Game class which would be instantiated by Libgdx android/desktop projects and a MainMenu class. Game class would handle the different game screens present.

Game:

Before game class we would add some values in Assets class and make one more global settings class for screen.

public class Assets{
   //...................
   //VIEWPORT SIZE
   public static final int VIRTUAL_WIDTH=320;
   public static final int VIRTUAL_HEIGHT=480;
   public static final int PIXEL_DENSITY=16;
//...................
}

ScreenSettings

public class ScreenSettings{
   //....................
   //IDS FOR DIFFERENT SCREENS
   public static final int NO_SCREEN=-1;
   public static final int MAINMENU_SCREEN=0;
   public static final int GAMEPLAY_SCREEN=1;
   // and so on ....................
}

And Now the Game class

public class Game implements ApplicationListener,InputProcessor {
   private Boolean _isInitialized=false;
   Screen _currentScreen;
   OrthographicCamera camera;
   TapResponse _tapResponse;
   Vector3 touchPoint;
   public Game(){
      //We will use this later while writing android specific code
   }
   @Override
   public void create() {
     if(!_isInitialized){
     //Initialize MenuScreen
     camera=CameraHelper.createCamera2(ViewportMode.STRETCH_TO_ASPECT, Assets.VIRTUAL_WIDTH,
     Assets.VIRTUAL_HEIGHT,Assets.PIXEL_DENSITY);
     _currentScreen=new MainMenu(ScreenSettings.SCREEN_NONE,camera,_tapResponse);
     _isInitialized=true;
     }
   }
   @Override
   public void render() {
    // TODO Auto-generated method stub
    float dt=Gdx.graphics.getDeltaTime();
    Update(dt);
   }
   public void Update(float dt){
     UpdateScreen();
     UpdateTouch();
   }
   public void UpdateTouch(){
     int x=Gdx.input.getX();   //Gdx.input.getX() gets the x position of touch point
     int y=Gdx.input.getY();  //Gdx.input.getY() gets the y position of touch point
     if(_isInitialized && !_currentScreen.IsDone){
       touchPoint.set(x,y,0);
       camera.unproject(touchPoint);
       _tapResponse.UpdateTouch((int)touchPoint.x,
       (int)touchPoint.y,Gdx.input.isTouched());
     }
   }
   public void UpdateScreen(){
     Application app = Gdx.app;
     _currentScreen.update(app);
     _currentScreen.render(app);
     if(_currentScreen.isDone()){
     int nextScreenID=_currentScreen.BackScreenID;                 //Get the screen which called the current screen
     _currentScreen.dispose();        //Disposing the resources of current screen
     if(nextScreenID==ScreenSettings.SCREEN_NONE){
       ExitApplication();
       return;
     }
     if(nextScreenID==ScreenSettings.MAINMENU_SCREEN){
       _currentScreen=new MainMenu(ScreenSettings.SCREEN_NONE,camera,_tapResponse);
       return;
     }
     if(nextScreenID==ScreenSettings.GAMEPLAY_SCREEN){
       //INSTANTIATE GAMEPLAY SCREEN
       return;
      }
     //Handle other screens in similar way
    }
   }
   void ExitApplication(){
      Gdx.app.exit(); //Libgdx function to exit the application
   } 
    //Other stubs of inputprocessor would be created
   //Leave them empty as of now
    //Later on we would implement  code there to handle the back button
}

MainMenu:

Finally the MainMenu class.

public class MainMenu extends Screen{
   TapResponse tapResponse;
   SpriteBatch spriteBatch;
   OrthographicCamera camera;
   Button[] buttons;
   public int BackScreenID;
   public MainMenu(int backScreenid,OrthographicCamera cam,TapResponse tapresponse){
       BackScreenID=backScreenid;
       camera=cam;
       tapResponse=tapresponse;
       spriteBatch=new SpriteBatch();
       spriteBatch.setProjectionMatrix(camera.combined);
       Init();   //Initialize the textures and variable states
   }
   void Init(){
     Assets.Load(); //in Assets class we would be loading the textures and settings
     //initialize the buttons in the menu
   }
   @Override
   public void update (Application app){
      //Check which button is clicked.
      //Set BackScreenID to the screen which should be shown next
      //depending on the button click
      //and then set IsDone=true
   }
   @Override
   public void render (Application app){
      Gdx.graphics.getGL10().glClear(GL10.GL_COLOR_BUFFER_BIT);  //Clear the screen
      spriteBatch.begin();
      spriteBatch.disableBlending();
      //Render those textures which dont have any alpha/transparent component
      //As it is faster to draw them while blending is disabled
      spriteBatch.enableBlending();
      spriteBatch.end();
    }
    @Override
    public void dispose (){
       //Dispose of the textures,fonts
       //dispose of spritebatch
    } 
    @Override
    public void OnPause(){
    }
    @Override 
    public void OnResume(){
    } 
    @Override
    public boolean isDone() {
       return IsDone;
    }
}

Summary:

So the line “initialize(new Game(), false);” in android project or the line “new JoglApplication(new Game(), “Game”, 320, 480, false); ” instantiates the Game Class. In its constructor we make an object MainMenu. In its update we check if the current Screen(MainMenu in this case) has been disposed off. If disposed then check the next screen to be instantiated. If BackScreenID from currentScreen contains a constant called no screen then game exits. In Render function we render the buttons present in the MainMenu.

Hopefully this will help you in some way in making your game.

Next Tutorial:

In the next tutorial we would start developing a simple game in the gameplay screen.

Let us know any of your doubts/suggestions; please put them in the comments section and we would try to answer them.

Thank you for the patience.

  • Tweet

1 thought on “Game Development in Android using Libgdx Part IV”

  1. Pingback: Game Development in Android using Libgdx Part V « DecisionTree Games

Comments are closed.

©2025 Rotating Canvas Games | Built using WordPress and Responsive Blogily theme by Superb