I have been wanting to get back into developing simple arcade games for the last few years. With modern mobile devices packing some serious processing power it seemed like a good time to start again. Back then it was all C++ and desktop Windows PCs using OpenGL or DirectX (or even better Irrlicht). Now, I wanted to focus on Android devices so Java and OpenGL ES were the obvious choice. To get my head back in the game (so to speak) I knocked up a simple invaders clone. The aim being to familiarise myself with OpenGL, user input options, and the performance capabilities of the devices.
I was using OpenGL ES 1.1 (fixed pipeline) and producing the meshes in code.
Cube, Icosahedron, and sphere approximation. The Sphere is approximated by subdividing the faces of an Icosahedron and pushing out the new vertices to lie on the sphere surface. From these basic meshes we can construct some simple game objects.
The scene graph makes use of transform matrices to position, scale and rotate the meshes relative to the parent node.
Each game object has a global transform applied to it, and this also applies to the bounding sphere which is used for collision detection.
The user is able to move the artillery and fire on the alien ships. When a collision is detected the ship and shell are destroyed and removed from the field of play.
This is a relatively simple scenario, and the processing capability of the mobile device should be more than sufficient to handle it. However, I noticed some slow down in the frame rate when firing (and running collision detection). The slowdown wasn’t in the physics, or the collision algorithms, but actually in the Garbage Collector being called when Collections were being modified. In the past when I’d used C++ this wasn’t an issue, memory management is handled by the user. But with Java, the Garbage Collector is an automatic process. On searching for more information about this I stumbled on this presentation by Kactus Games that gave some great insights into Android Game Development.
On further research I stumbled on an excellent framework that takes the limitations of Java into account to allow developers to create games that will run not only on Android devices, but also on the desktop, in HTML5 browsers, and on iOS devices. LibGDX is definitely worth a look. The documentation, tutorials and example code are extensive and comprehensive. I’m now going back to the start to build a quick test game using this framework prior to experimenting with some novel ideas I have for a new game.