added moveable component and limited gameclock to 60fps
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
50
src/de/mp/jgame2d/core/KeyHandler.java
Normal file
50
src/de/mp/jgame2d/core/KeyHandler.java
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user