added collision

This commit is contained in:
2025-11-26 22:51:06 +01:00
parent 00f59ec896
commit 2d69c01469
5 changed files with 97 additions and 32 deletions

View File

@@ -2,6 +2,7 @@ package de.miaurizius.jgame2d.entity;
import de.miaurizius.jgame2d.core.Direction;
import java.awt.*;
import java.awt.image.BufferedImage;
public class Entity {
@@ -15,4 +16,7 @@ public class Entity {
public int spriteCounter = 0;
public int spriteNum = 1;
public Rectangle solidArea;
public boolean collisionOn = false;
}

View File

@@ -20,8 +20,16 @@ public class Player extends Entity {
public Player(GamePanel panel, KeyHandler keyH) {
this.panel = panel;
this.keyH = keyH;
screenX = panel.screenWidth/2 - panel.tileSize/2;
screenY = panel.screenHeight/2 - panel.tileSize/2;
solidArea = new Rectangle();
solidArea.x = 9;
solidArea.y = 18;
solidArea.width = 32;
solidArea.height = 32;
setDefaultValues();
getPlayerImage();
}
@@ -51,18 +59,22 @@ public class Player extends Entity {
public void update() {
//Move player
if(keyH.upPressed || keyH.downPressed || keyH.leftPressed || keyH.rightPressed) {
if(keyH.upPressed) {
direction = Direction.UP;
worldY -= speed;
} else if(keyH.downPressed) {
direction = Direction.DOWN;
worldY += speed;
} else if(keyH.leftPressed) {
direction = Direction.LEFT;
worldX -= speed;
} else if(keyH.rightPressed) {
direction = Direction.RIGHT;
worldX += speed;
if(keyH.upPressed) direction = Direction.UP;
else if(keyH.downPressed) direction = Direction.DOWN;
else if(keyH.leftPressed) direction = Direction.LEFT;
else if(keyH.rightPressed) direction = Direction.RIGHT;
// CHECK TILE COLLISION
collisionOn = false;
panel.collisionH.checkTile(this);
if(!collisionOn) {
switch (direction) {
case UP -> worldY -= speed;
case DOWN -> worldY += speed;
case LEFT ->worldX -= speed;
case RIGHT -> worldX += speed;
}
}
spriteCounter++;
@@ -75,21 +87,12 @@ public class Player extends Entity {
}
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;
}
BufferedImage image = switch (direction) {
case UP -> (spriteNum == 1) ? up1 : up2;
case DOWN -> (spriteNum == 1) ? down1 : down2;
case LEFT -> (spriteNum == 1) ? left1 : left2;
case RIGHT -> (spriteNum == 1) ? right1 : right2;
};
graphics2d.drawImage(image, screenX, screenY, panel.tileSize, panel.tileSize, null);
}