added moveable component and limited gameclock to 60fps

This commit is contained in:
2025-11-26 20:46:09 +01:00
parent 551dddeb0a
commit 1a822434b3
2 changed files with 89 additions and 3 deletions

View File

@@ -16,12 +16,23 @@ public class GamePanel extends JPanel implements Runnable {
final int screenWidth = tileSize * maxScreenCol; // 768 pixels
final int screenHeight = tileSize * maxScreenRow; // 576 pixels
//FPS
int FPS = 60;
KeyHandler keyH = new KeyHandler();
Thread gameThread;
//Default position
int playerX = 100;
int playerY = 100;
int playerSpeed = 4;
public GamePanel() {
this.setPreferredSize(new Dimension(screenWidth, screenHeight));
this.setBackground(Color.black);
this.setDoubleBuffered(true);
this.addKeyListener(keyH);
this.setFocusable(true);
}
public void startGameThread() {
@@ -31,18 +42,43 @@ public class GamePanel extends JPanel implements Runnable {
@Override
public void run() {
double drawInterval = 1000000000 / FPS;
double delta = 0;
double lastTime = System.nanoTime();
long currentTime;
while(gameThread != null) {
currentTime = System.nanoTime();
delta += (currentTime - lastTime) / drawInterval;
lastTime = currentTime;
if(delta >= 1) {
update();
repaint();
delta--;
}
}
}
public void update() {
//Move player
if(keyH.upPressed) {
playerY -= playerSpeed;
} else if(keyH.downPressed) {
playerY += playerSpeed;
} else if(keyH.leftPressed) {
playerX -= playerSpeed;
} else if(keyH.rightPressed) {
playerX += playerSpeed;
}
}
public void paintComponent(Graphics graphics) {
super.paintComponent(graphics);
Graphics2D graphics2d = (Graphics2D) graphics;
graphics2d.setColor(Color.white);
graphics2d.fillRect(playerX, playerY, tileSize, tileSize);
graphics.dispose();
}
}

View File

@@ -0,0 +1,50 @@
package de.mp.jgame2d.core;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class KeyHandler implements KeyListener {
public boolean upPressed, downPressed, leftPressed, rightPressed;
@Override
public void keyTyped(KeyEvent e) {}
@Override
public void keyPressed(KeyEvent e) {
int code = e.getKeyCode();
switch (code) {
case KeyEvent.VK_W, KeyEvent.VK_UP:
upPressed = true;
break;
case KeyEvent.VK_S, KeyEvent.VK_DOWN:
downPressed = true;
break;
case KeyEvent.VK_A, KeyEvent.VK_LEFT:
leftPressed = true;
break;
case KeyEvent.VK_D, KeyEvent.VK_RIGHT:
rightPressed = true;
break;
}
}
@Override
public void keyReleased(KeyEvent e) {
int code = e.getKeyCode();
switch (code) {
case KeyEvent.VK_W, KeyEvent.VK_UP:
upPressed = false;
break;
case KeyEvent.VK_S, KeyEvent.VK_DOWN:
downPressed = false;
break;
case KeyEvent.VK_A, KeyEvent.VK_LEFT:
leftPressed = false;
break;
case KeyEvent.VK_D, KeyEvent.VK_RIGHT:
rightPressed = false;
break;
}
}
}