Game Development without an engine
Making a game from scratch (in pure Java) has taught me a lot about how games work; from creating my own tilemap loader and game loop to writing logic for a camera, following this tutorial series is really helping me to understand the core concepts better.
Using Java and Java Swing (JFrame / JPanel)
Using Java Swing for the window means I don’t have anything prebuilt in terms of game development. No library like raylib to simply GetKeyPressed(). I had to write a KeyHandler class which implements java.awt.KeyListener and manages public variables for different keys. I had to account for the width and height of the tiles, and manage an array to store different tile images.
Game Loop
The first thing I did was implement a basic loop: update the positions of entities → render the screen → wait for the frame time to be correct. This was then changed to calculate and use delta time instead of Thread.sleep() for better accuracy. The current loop looks like this:
public void run() {
double drawInterval = 1_000_000_000 / FPS;
double delta = 0;
long lastTime = System.nanoTime();
long currentTime;
while (gameThread != null) {
currentTime = System.nanoTime();
delta += (currentTime - lastTime) / drawInterval;
timer += currentTime - lastTime;
lastTime = currentTime;
if (delta >= 1) {
update();
repaint();
delta--;
}
}It calculates the delta time, and if enough time has passed, update() and repaint() perform the update + render logic. Delta time is then decreased by 1. This loops until the game is closed.