使用KeyListener和滚动背景进行碰撞检测

时间:2016-09-06 20:21:32

标签: java collision-detection keylistener

我的代码有一个非常奇怪的问题。我正在制作一个有趣的小游戏,但我遇到了碰撞问题。真正奇怪的是,碰撞正在被发现,但一切都没有发生。这是代码:

public void keyPressed(KeyEvent e){
        int key = e.getKeyCode();

        int x = player.getCurX();
        int y = player.getCurY();

        for(int col = 0; col < X_AMOUNT; col++){
            for(int row = 0; row < Y_AMOUNT; row++){

                MazeBlock check = field[col][row];

                if(check.getState() == false){
                    int cX = check.getX()-(player.backX);
                    int cY = check.getY()-(player.backY);

                    if((y <= cY+BLOCK_SIZE && y >= cY) || (y+PLAYER_WIDTH >= cY && y+PLAYER_WIDTH <= cY+BLOCK_SIZE)){ // if on same y axis
                        if(x+PLAYER_WIDTH >= cX && x+PLAYER_WIDTH <= cX+BLOCK_SIZE){ // if coming from left
                            System.out.println("is coming from left");
                            player.setVelX(0);
                        } else {
                            if(key == KeyEvent.VK_RIGHT|| key == KeyEvent.VK_D)
                                player.setVelX(1);
                        }

                        if(x <= cX+BLOCK_SIZE && x >= cX){ //if coming from right
                            System.out.println("is coming from right");
                            player.setVelX(0);
                        } else {
                            if(key == KeyEvent.VK_LEFT || key == KeyEvent.VK_A)
                                player.setVelX(-1);
                        }
                    }
                }
            }
        }
        if(key == KeyEvent.VK_UP || key == KeyEvent.VK_W)
            player.setVelY(-1);
        if(key == KeyEvent.VK_DOWN || key == KeyEvent.VK_S)
            player.setVelY(1);
    }

我要解释所有这些,因为要看很多。 - 变量x和y是玩家的位置。 -cX和cY是其下块的位置。 -player.setVelX设置X平面上的移动。它被添加到播放器的当前位置以移动播放器。 - println语句显示了来自块的播放方式。 -check.getState检查正在检查的块是否为wall block

因此,每当我触摸墙块时,我都会在控制台中收到正确的信息,但我仍然能够移动到该区块中。有没有人对如何修复它有任何想法,或者它是一个失败的原因?

0 个答案:

没有答案