Compare commits
5 Commits
fb9ccc1d35
...
3feb0558ca
| Author | SHA1 | Date | |
|---|---|---|---|
|
3feb0558ca
|
|||
|
529effeb12
|
|||
|
1a822434b3
|
|||
|
551dddeb0a
|
|||
|
ac076e90b5
|
BIN
assets/player/boy_down_1.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
assets/player/boy_down_2.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
assets/player/boy_left_1.png
Normal file
|
After Width: | Height: | Size: 5.9 KiB |
BIN
assets/player/boy_left_2.png
Normal file
|
After Width: | Height: | Size: 5.9 KiB |
BIN
assets/player/boy_right_1.png
Normal file
|
After Width: | Height: | Size: 5.9 KiB |
BIN
assets/player/boy_right_2.png
Normal file
|
After Width: | Height: | Size: 5.9 KiB |
BIN
assets/player/boy_up_1.png
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
assets/player/boy_up_2.png
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
@@ -10,8 +10,15 @@ public class Boot {
|
|||||||
window.setResizable(false);
|
window.setResizable(false);
|
||||||
window.setTitle("JGame2D");
|
window.setTitle("JGame2D");
|
||||||
|
|
||||||
|
GamePanel gamePanel = new GamePanel();
|
||||||
|
window.add(gamePanel);
|
||||||
|
|
||||||
|
window.pack();
|
||||||
|
|
||||||
window.setLocationRelativeTo(null);
|
window.setLocationRelativeTo(null);
|
||||||
window.setVisible(true);
|
window.setVisible(true);
|
||||||
|
|
||||||
|
gamePanel.startGameThread();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
19
src/de/mp/jgame2d/core/Direction.java
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
package de.mp.jgame2d.core;
|
||||||
|
|
||||||
|
public enum Direction {
|
||||||
|
|
||||||
|
UP("up"),
|
||||||
|
DOWN("down"),
|
||||||
|
LEFT("left"),
|
||||||
|
RIGHT("right");
|
||||||
|
|
||||||
|
private final String name;
|
||||||
|
|
||||||
|
Direction(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,10 +1,86 @@
|
|||||||
package de.mp.jgame2d.core;
|
package de.mp.jgame2d.core;
|
||||||
|
|
||||||
import javax.swing.*;
|
import de.mp.jgame2d.entity.Player;
|
||||||
|
|
||||||
public class GamePanel extends JPanel {
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
public class GamePanel extends JPanel implements Runnable {
|
||||||
|
|
||||||
// SCREEN SETTINGS
|
// SCREEN SETTINGS
|
||||||
final int originalTileSize = 16; //16x16 tile
|
final int originalTileSize = 16; //16x16 tile
|
||||||
|
final int scale = 3;
|
||||||
|
|
||||||
|
public final int tileSize = originalTileSize * scale; //48x48 tile
|
||||||
|
// 4:3 ratio
|
||||||
|
final int maxScreenCol = 16;
|
||||||
|
final int maxScreenRow = 12;
|
||||||
|
final int screenWidth = tileSize * maxScreenCol; // 768 pixels
|
||||||
|
final int screenHeight = tileSize * maxScreenRow; // 576 pixels
|
||||||
|
|
||||||
|
//FPS
|
||||||
|
int FPS = 60;
|
||||||
|
|
||||||
|
KeyHandler keyH = new KeyHandler();
|
||||||
|
Thread gameThread;
|
||||||
|
Player player = new Player(this, keyH);
|
||||||
|
|
||||||
|
//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() {
|
||||||
|
gameThread = new Thread(this);
|
||||||
|
gameThread.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
double drawInterval = 1000000000 / FPS;
|
||||||
|
double delta = 0;
|
||||||
|
double lastTime = System.nanoTime();
|
||||||
|
long currentTime;
|
||||||
|
long timer = 0;
|
||||||
|
int drawCount = 0;
|
||||||
|
|
||||||
|
while(gameThread != null) {
|
||||||
|
currentTime = System.nanoTime();
|
||||||
|
delta += (currentTime - lastTime) / drawInterval;
|
||||||
|
timer += currentTime - lastTime;
|
||||||
|
lastTime = currentTime;
|
||||||
|
|
||||||
|
if(delta >= 1) {
|
||||||
|
update();
|
||||||
|
repaint();
|
||||||
|
delta--;
|
||||||
|
drawCount++;
|
||||||
|
}
|
||||||
|
if(timer >= 1000000000) {
|
||||||
|
System.out.println("FPS: " + drawCount);
|
||||||
|
drawCount = 0;
|
||||||
|
timer = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void update() {
|
||||||
|
player.update();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void paintComponent(Graphics graphics) {
|
||||||
|
super.paintComponent(graphics);
|
||||||
|
Graphics2D graphics2d = (Graphics2D) graphics;
|
||||||
|
player.draw(graphics2d);
|
||||||
|
graphics.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
18
src/de/mp/jgame2d/entity/Entity.java
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
package de.mp.jgame2d.entity;
|
||||||
|
|
||||||
|
import de.mp.jgame2d.core.Direction;
|
||||||
|
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
|
||||||
|
public class Entity {
|
||||||
|
|
||||||
|
public int x, y;
|
||||||
|
public int speed;
|
||||||
|
|
||||||
|
public BufferedImage up1, up2, down1, down2, left1, left2, right1, right2;
|
||||||
|
public Direction direction;
|
||||||
|
|
||||||
|
public int spriteCounter = 0;
|
||||||
|
public int spriteNum = 1;
|
||||||
|
|
||||||
|
}
|
||||||
91
src/de/mp/jgame2d/entity/Player.java
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
package de.mp.jgame2d.entity;
|
||||||
|
|
||||||
|
import de.mp.jgame2d.core.Direction;
|
||||||
|
import de.mp.jgame2d.core.GamePanel;
|
||||||
|
import de.mp.jgame2d.core.KeyHandler;
|
||||||
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.*;
|
||||||
|
|
||||||
|
public class Player extends Entity {
|
||||||
|
|
||||||
|
GamePanel panel;
|
||||||
|
KeyHandler keyH;
|
||||||
|
|
||||||
|
public Player(GamePanel panel, KeyHandler keyH) {
|
||||||
|
this.panel = panel;
|
||||||
|
this.keyH = keyH;
|
||||||
|
setDefaultValues();
|
||||||
|
getPlayerImage();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDefaultValues() {
|
||||||
|
x = 100;
|
||||||
|
y = 100;
|
||||||
|
speed = 4;
|
||||||
|
direction = Direction.DOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void getPlayerImage() {
|
||||||
|
try {
|
||||||
|
up1 = ImageIO.read(new FileInputStream("assets/player/boy_up_1.png"));
|
||||||
|
up2 = ImageIO.read(new FileInputStream("assets/player/boy_up_2.png"));
|
||||||
|
down1 = ImageIO.read(new FileInputStream("assets/player/boy_down_1.png"));
|
||||||
|
down2 = ImageIO.read(new FileInputStream("assets/player/boy_down_2.png"));
|
||||||
|
left1 = ImageIO.read(new FileInputStream("assets/player/boy_left_1.png"));
|
||||||
|
left2 = ImageIO.read(new FileInputStream("assets/player/boy_left_2.png"));
|
||||||
|
right1 = ImageIO.read(new FileInputStream("assets/player/boy_right_1.png"));
|
||||||
|
right2 = ImageIO.read(new FileInputStream("assets/player/boy_right_2.png"));
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void update() {
|
||||||
|
//Move player
|
||||||
|
if(keyH.upPressed || keyH.downPressed || keyH.leftPressed || keyH.rightPressed) {
|
||||||
|
if(keyH.upPressed) {
|
||||||
|
direction = Direction.UP;
|
||||||
|
y -= speed;
|
||||||
|
} else if(keyH.downPressed) {
|
||||||
|
direction = Direction.DOWN;
|
||||||
|
y += speed;
|
||||||
|
} else if(keyH.leftPressed) {
|
||||||
|
direction = Direction.LEFT;
|
||||||
|
x -= speed;
|
||||||
|
} else if(keyH.rightPressed) {
|
||||||
|
direction = Direction.RIGHT;
|
||||||
|
x += speed;
|
||||||
|
}
|
||||||
|
|
||||||
|
spriteCounter++;
|
||||||
|
if(spriteCounter > 12) {
|
||||||
|
if(spriteNum == 1) spriteNum = 2;
|
||||||
|
else if(spriteNum == 2) spriteNum = 1;
|
||||||
|
else spriteNum = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void draw(Graphics2D graphics2d) {
|
||||||
|
BufferedImage image = null;
|
||||||
|
switch (direction) {
|
||||||
|
case UP:
|
||||||
|
image = (spriteNum == 1) ? up1 : up2;
|
||||||
|
break;
|
||||||
|
case DOWN:
|
||||||
|
image = (spriteNum == 1) ? down1 : down2;
|
||||||
|
break;
|
||||||
|
case LEFT:
|
||||||
|
image = (spriteNum == 1) ? left1 : left2;
|
||||||
|
break;
|
||||||
|
case RIGHT:
|
||||||
|
image = (spriteNum == 1) ? right1 : right2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
graphics2d.drawImage(image, x, y, panel.tileSize, panel.tileSize, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||