Hi I made this collision code, but its a little buggy. My player cant move either right or left and up or down when standing next to a wall. Iโm pretty sure it has to do with detecting which rectangle is close to the player. I also want to optimise it so that it only checks the rectangles closest to the player
Any help would be nice
public void collision(){
//Collision
//Save old position
float oldX = getX();
float oldY = getY();
boolean collisionX = false, collisionY = false;
rectPlayer.setSize(rectPlayer.getWidth() / world.getUnitScale(), rectPlayer.getWidth() / world.getUnitScale());
// move on x
setX(getX() + speedX / world.getUnitScale());
if(speedX < 0) { // going left
for(int i = 0; i < world.getCollisionBoxes().size(); i++){
if(getX() > world.getCollisionBoxes().get(i).x){
if(rectPlayer.overlaps(world.getCollisionBoxes().get(i))){
collisionX = true;
System.out.println("Left");
}
}
}
}else if(speedX > 0) { // going right
for(int i = 0; i < world.getCollisionBoxes().size(); i++){
if(getX() < world.getCollisionBoxes().get(i).x){
if(rectPlayer.overlaps(world.getCollisionBoxes().get(i))){
collisionX = true;
System.out.println("Right");
}
}
}
}
// react to x collision
if(collisionX) {
setX(oldX);
speedX = 0;
}
// move on y
setY(getY() + speedY / world.getUnitScale());
if(speedY < 0) { // going down
for(int i = 0; i < world.getCollisionBoxes().size(); i++){
if(getY() > world.getCollisionBoxes().get(i).y){
if(rectPlayer.overlaps(world.getCollisionBoxes().get(i))){
collisionY = true;
System.out.println("Down");
}
}
}
}else if(speedY > 0) { // going up
for(int i = 0; i < world.getCollisionBoxes().size(); i++){
if(getY() < world.getCollisionBoxes().get(i).y){
if(rectPlayer.overlaps(world.getCollisionBoxes().get(i))){
collisionY = true;
System.out.println("Up");
}
}
}
}
// react to y collision
if(collisionY) {
setY(oldY);
speedY = 0;
}
rectPlayer.setSize(rectPlayer.getWidth() * world.getUnitScale(), rectPlayer.getHeight() * world.getUnitScale());
}