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