Making my First libGDX Game
Recently I decided to create a simple Android game and it was much easier than I thought it would be!
I had never made an Android game before but I had made a few Android apps as well as a JOGL game which is great as it meant I had a good idea of what was happening behind the scenes.
Game development frameworks like libGDX often make it easy to create games because they handle a lot of the low level work. libGDX is more or less a wrapper over OpenGL and allows you to make raw OpenGL API calls if you so desire. Even though libGDX is very simple to use, I would still recommend making a simple game with raw OpenGL to fully grasp what is happening behind the scenes.
Picking a game to make
The first step in making a game is deciding what you actually want to make. For my first game I thought I'd stick to something simple that other developers had made tutorials on. Turns out that Flappy Bird clones are the Hello World App's of the game development world. As I own a green cheek conure called Siavash it was only reasonable I made a clone called Flappy Siavash.
Brent Aureli's Tutorial
I'm not going to go through the actual game making process in this post.
I ended up following this tutorial by Brent Aureli up to around part 7 before I got a hang of things and started to finish off the game myself.
Features
My game ended up having the following features:
- Main Menu Screen (very basic with a play button)
- Custom sprite (coloured to match my bird Siavash)
- Obstacle crash animation (rotating into nose dive into ground)
- Obstacle crash screen flash
- Using cages as the obstacle
- Number of cages active at any given time can be changed
- Fade in/Fade out for various text/sprites/etc
- Pause menu to pause game
- Game over menu with option to play again
- High score functionality (using local storage)
- Works and tested on Android, Java, Web
- Uses custom distance field font with fragment/vertex shader
- Scrolling backgrounds
- Randomised obstacles
- Endless mode
Gameplay
Tips
Here are some tips which may help you when creating your own libGDX game:
- Make sure you dispose resources (textures etc) when you are done using them or you will have memory leaks.
- Don't remake the same Texture etc all the time, store the Texture somewhere (in the class or put in in an asset manager and retrieve it whenever needed)
- If possible, keep assets with widths/heights that are powers of 2. Assets seem to fail to load correctly with GWT (Google Web Toolkit) otherwise.
- Organise assets in subfolders (
shaders/images/sounds/sprites
)! Don't dump everything into the same folder. - When updating your states, always use dt (delta time) to scale your changes appropriately.
- Place sprites in your word using coords relative to the cameras viewport width/height.
- Keep a helper class with various static methods useful for performing common tasks (do the same with a debug class for debugging).
Source Code
The code from my project is available on Github if you are interested:
https://github.com/mobeigi/Flappy-Siavash
Play Online
Play Online At:
https://mobeigi.dev/flappysiavash/
Play Store App
I decided to release this app to the Google Play Store to learn about the Play Store publishing process.
Available at:
https://play.google.com/store/apps/details?id=com.mobeigi.flappysiavash
My Next Project
I am now working on a much more complicated/unique game which I plan to polish up.
This project will likely take much, much longer but I will also learn a lot along the way.