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 screenWidth = tileSize * maxScreenCol; // 768 pixels
|
||||||
final int screenHeight = tileSize * maxScreenRow; // 576 pixels
|
final int screenHeight = tileSize * maxScreenRow; // 576 pixels
|
||||||
|
|
||||||
|
//FPS
|
||||||
|
int FPS = 60;
|
||||||
|
|
||||||
|
KeyHandler keyH = new KeyHandler();
|
||||||
Thread gameThread;
|
Thread gameThread;
|
||||||
|
|
||||||
|
//Default position
|
||||||
|
int playerX = 100;
|
||||||
|
int playerY = 100;
|
||||||
|
int playerSpeed = 4;
|
||||||
|
|
||||||
public GamePanel() {
|
public GamePanel() {
|
||||||
this.setPreferredSize(new Dimension(screenWidth, screenHeight));
|
this.setPreferredSize(new Dimension(screenWidth, screenHeight));
|
||||||
this.setBackground(Color.black);
|
this.setBackground(Color.black);
|
||||||
this.setDoubleBuffered(true);
|
this.setDoubleBuffered(true);
|
||||||
|
this.addKeyListener(keyH);
|
||||||
|
this.setFocusable(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startGameThread() {
|
public void startGameThread() {
|
||||||
@@ -31,18 +42,43 @@ public class GamePanel extends JPanel implements Runnable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
double drawInterval = 1000000000 / FPS;
|
||||||
|
double delta = 0;
|
||||||
|
double lastTime = System.nanoTime();
|
||||||
|
long currentTime;
|
||||||
|
|
||||||
while(gameThread != null) {
|
while(gameThread != null) {
|
||||||
|
currentTime = System.nanoTime();
|
||||||
|
delta += (currentTime - lastTime) / drawInterval;
|
||||||
|
lastTime = currentTime;
|
||||||
|
|
||||||
|
if(delta >= 1) {
|
||||||
update();
|
update();
|
||||||
repaint();
|
repaint();
|
||||||
|
delta--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void update() {
|
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) {
|
public void paintComponent(Graphics graphics) {
|
||||||
super.paintComponent(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