Java Game Collision Slick2D

时间:2014-02-03 20:14:53

标签: java collision slick2d

我正在使用Slick和Tiled2D制作一款自上而下的RPG风格游戏。我试图做碰撞,但玩家似乎能够穿过建筑物左侧的块或者块的左半部分。完整的项目在这里:http://github.com/Cj1m/RPG 这是我的玩家移动和碰撞检测代码:

@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];
}

1 个答案:

答案 0 :(得分:0)

我猜isBlocked中的x和y是玩家的像素精确x和y位置,而xBlock和yBlock是平铺精确位置。

当你说他们经历了一半的阻止时,这似乎就像我在

的四舍五入问题
int xBlock = (int)x / 30;
int yBlock = (int)y / 30;

尝试一下

的内容
(int) Math.round(x/30.0);