created moveable player

This commit is contained in:
2025-11-26 21:22:35 +01:00
parent 529effeb12
commit 3feb0558ca
12 changed files with 134 additions and 13 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

BIN
assets/player/boy_up_1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

BIN
assets/player/boy_up_2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

View 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;
}
}

View File

@@ -1,5 +1,7 @@
package de.mp.jgame2d.core; package de.mp.jgame2d.core;
import de.mp.jgame2d.entity.Player;
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
@@ -9,7 +11,7 @@ public class GamePanel extends JPanel implements Runnable {
final int originalTileSize = 16; //16x16 tile final int originalTileSize = 16; //16x16 tile
final int scale = 3; final int scale = 3;
final int tileSize = originalTileSize * scale; //48x48 tile public final int tileSize = originalTileSize * scale; //48x48 tile
// 4:3 ratio // 4:3 ratio
final int maxScreenCol = 16; final int maxScreenCol = 16;
final int maxScreenRow = 12; final int maxScreenRow = 12;
@@ -21,6 +23,7 @@ public class GamePanel extends JPanel implements Runnable {
KeyHandler keyH = new KeyHandler(); KeyHandler keyH = new KeyHandler();
Thread gameThread; Thread gameThread;
Player player = new Player(this, keyH);
//Default position //Default position
int playerX = 100; int playerX = 100;
@@ -70,23 +73,13 @@ public class GamePanel extends JPanel implements Runnable {
} }
public void update() { public void update() {
//Move player player.update();
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 graphics2d = (Graphics2D) graphics;
graphics2d.setColor(Color.white); player.draw(graphics2d);
graphics2d.fillRect(playerX, playerY, tileSize, tileSize);
graphics.dispose(); graphics.dispose();
} }

View 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;
}

View 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);
}
}