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.setTitle("JGame2D");
|
||||
|
||||
GamePanel gamePanel = new GamePanel();
|
||||
window.add(gamePanel);
|
||||
|
||||
window.pack();
|
||||
|
||||
window.setLocationRelativeTo(null);
|
||||
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;
|
||||
|
||||
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
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||