Я использую Slick и Tiled2D для создания игры в стиле нисходящего RPG. Я пытаюсь сделать столкновение, но игрок, похоже, может пройти через блоки, которые находятся на левой стороне здания, или в левой половине блока. Полный проект здесь: http://github.com/Cj1m/RPG Вот мой код для обнаружения движения игрока и столкновения:Java Game Collision Slick2D
@Override
public void update(GameContainer gc, int delta) throws SlickException {
input = gc.getInput();
if(input.isKeyDown(Input.KEY_W)){
if(!isBlocked(x, y - delta * 0.1f)){
y-=0.1 * delta;
timer(0,1,delta);
}
}else if(input.isKeyDown(Input.KEY_S) && y < screenBottomEdge){
if (!isBlocked(x, y + playerHeight + delta * 0.1f)){
y+=0.1 * delta;
timer(0,0,delta);
}
}else if(input.isKeyDown(Input.KEY_A) && x > screenLeftEdge){
if (!isBlocked(x - delta * 0.1f, y)){
x-=0.1 * delta;
timer(0,2,delta);
}
}else if(input.isKeyDown(Input.KEY_D) && x < screenRightEdge){
if (!isBlocked(x + playerWidth + delta * 0.1f, y)){
x+=0.1 * delta;
timer(0,3,delta);
}
}
}
и
private boolean isBlocked(float x, float y) {
int xBlock = (int)x/30;
int yBlock = (int)y/30;
return blocked[xBlock][yBlock];
}
The заявления, используя '(целое) _/30', вероятно, возвращают 0, так как вы делите на целое число. – sdasdadas
В isBlocked, вы бросаете слишком рано. Попробуйте float xBlock = x/30; (то же самое для yBlock), затем в возврате попробуйте вернуть заблокированный [(int) xBlock] [(int) yBlock]; – Samich