The gdx2d
project is a simple to use 2d game and graphics framework. It is multi-platform (working on Windows, Linux and MacOS). It is Java based with the heavy-lifting done in native code (i.e. C/C++), for example for physics rendering. Since 2022, the basic code also explicitly exists for Scala
enthusiasts !
The library contains simple to use graphical primitives such as lines, circles, rectangles. In addition, there are methods to draw pictures, rotate them, scale them etc. Physics simulation is also supported (using Box2D
) as well as music and sound playing.
For each feature, a Java demo is provided for simple integration. Here are some examples of what the library is capable of (you can check the YouTube demo reel):
The advantage of using gdx2d
is that you can develop your code in Java on your standard desktop computer like any other Java application and then deploy the same code, with a single click, on an Android phone or tablet. Of course, you have to take into consideration the fact that some of your code is a bit different for Android (for instance, you do not have accelerometers on your PC).
The library itself is a wrapper around a very nice library called libGDX which provides almost everything to the library. The current project version is based on libGDX version 1.5.6
.
The Javadoc API of this library can be found here.
It is multi-platform so that you can run your code on desktop computers (running either Windows, Linux or Mac) but also on mobile devices running Android. It is based on libGDX but provides a much simpler interface and multiple demo programs to get started.
Using the framework, the following code displays a shrinking/growing circle running smoothly:
package hevs.gdx2d.demos.simple;
import com.badlogic.gdx.Gdx;
import hevs.gdx2d.lib.GdxGraphics;
import hevs.gdx2d.lib.PortableApplication;
import com.badlogic.gdx.graphics.Color;
/**
* A very simple demonstration on how to display something animated with the
* library
*
* @author Pierre-André Mudry (mui)
* @version 1.0
*/
public class DemoSimpleAnimation extends PortableApplication {
int radius = 5, speed = 1;
int screenHeight, screenWidth;
@Override
public void onInit() {
// Sets the window title
setTitle("Simple demo, mui 2013");
screenHeight = Gdx.graphics.getHeight();
screenWidth = Gdx.graphics.getWidth();
}
@Override
public void onGraphicRender(GdxGraphics g) {
// Clears the screen
g.clear();
g.drawAntiAliasedCircle(screenWidth / 2, screenHeight / 2, radius, Color.BLUE);
// If reaching max or min size, invert the growing direction
if (radius >= 100 || radius <= 3) {
speed *= -1;
}
// Modify the radius
radius += speed;
g.drawSchoolLogo();
}
public static void main(String[] args) {
new DemoSimpleAnimation();
}
}
import com.badlogic.gdx.Gdx
import com.badlogic.gdx.graphics.Color
import ch.hevs.gdx2d.lib.GdxGraphics
import ch.hevs.gdx2d.desktop.PortableApplication
/**
* A very simple demonstration on how to display something animated with the library
*
* @author Pierre-André Mudry (mui)
* @author Steve Devènes (dst)
* @version 1.0
*/
class DemoSimpleAnimation() extends PortableApplication {
var radius = 5
var speed = 1
var screenHeight, screenWidth = 0
override def onInit(): Unit = {
// Sets the window title
setTitle("Simple demo, mui 2013")
screenHeight = Gdx.graphics.getHeight
screenWidth = Gdx.graphics.getWidth
}
override def onGraphicRender(g: GdxGraphics): Unit = {
// Clears the screen
g.clear()
g.drawAntiAliasedCircle(screenWidth / 2, screenHeight / 2, radius, Color.BLUE)
// If reaching max or min size, invert the growing direction
if (radius >= 100 || radius <= 3) {
speed *= -1
}
// Modify the radius
radius += speed
g.drawSchoolLogo()
}
}
object DemoSimpleAnimation extends App{
new DemoSimpleAnimation()
}
It was first developed for the inf1 course given at HES-SO Valais / Systems engineering by Pierre-André Mudry. It has then been adapted for the 101 Fundamentals of programming 1 course of ISC bachelor degree programme.
The framework was written by P.-A. Mudry & N. Chatton with the help of C. Métrailler. Some work also has then been done by M. Pignat, C. Papon and S. Devènes. A full list of contributors is available here.
The gdx2d project is licensed under the Apache 2.0 license.