olá, esses últimos dias estive programando um jogo em java, porém por algum motivo a entidade enemy(inimigo do meu jogo) sem motivo algum começou a atravessar paredes e correr mais rápido em direções específicas, exemplo: ele atravessa as paredes e corre mais rápido somente quando vai para direita ou para baixo, mas para esquerda e para cima a colisão e a velocidade funcionam normal.
eu tentei varias formas e já revirei todas as classes do meu projeto, e não consegui resolver o erro, também já tentei procurar na internet, mas não acho nada relacionado a isso, por favor, preciso de ajuda.
segue código da classe Enemy abaixo:
package com.vlasstudios.entities;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import com.vlasstudios.main.Game;
import com.vlasstudios.world.World;
public class Enemy extends Entity {
	private double speed = 1;
	
	private int frames = 0,maxFrames = 3,index = 0,maxIndex = 2;
	
	private BufferedImage[] sprites;
	
	public Enemy(int x, int y, int width, int height, BufferedImage sprite) {
		super(x, y, width, height, null);
		sprites = new BufferedImage[3];
		sprites[0] = Game.spritesheet.getSprite(112, 16, 16, 16);
		sprites[1] = Game.spritesheet.getSprite(128, 16, 16, 16);
		sprites[2] = Game.spritesheet.getSprite(144, 16, 16, 16);
	}
	
	public void tick() {
		
		if((int)x > Game.player.getX() && World.isFree((int)(x-speed),(int)this.getY())
				&& !isColidding((int)(x-speed),(int)this.getY())) {
			x-=speed;
		}
		else if((int)x < Game.player.getX() && World.isFree((int)(x+speed),(int)this.getY())
				&& !isColidding((int)(x+speed),(int)this.getY())) {
			x+=speed;
		}
		if(y > Game.player.getY() && World.isFree(this.getX(),(int)(y-speed))
				&& !isColidding(this.getX(),(int)(y-speed))) {
			y-=speed;
		}
		else if(y < Game.player.getY() && World.isFree(this.getX(),(int)(y-speed))
				&& !isColidding(this.getX(),(int)(y+speed))) {
			y+=speed;
		}
		frames++;
		if(frames == maxFrames) {
			frames = 0;
		    index++;
		    if(index > maxIndex) {
		    	index = 0;
		    }
 }
		}
		public boolean isColidding(int xnext, int ynext){
        Rectangle enemyCurrent = new Rectangle(xnext,ynext,World.TILE_SIZE,World.TILE_SIZE);
        for(int i =0; i < Game.enemies.size(); i++) {
        	Enemy e = Game.enemies.get(i);
        	if(e == this)
        		continue;
        	Rectangle targetEnemy = new Rectangle(e.getX(),e.getY(),World.TILE_SIZE,World.TILE_SIZE);
        	if(enemyCurrent.intersects(targetEnemy)) {
        		return true;
        	}
        }
        
        return false;
		}
	public void render(Graphics g) {
		g.drawImage(sprites[index], this.getX(), this.getY(), null);
		
	}
}