Java 检测到碰撞,但bug-可以进入内部,而不受影响的平台移动

Java 检测到碰撞,但bug-可以进入内部,而不受影响的平台移动,java,collision-detection,Java,Collision Detection,请看这张GIF: 碰撞检测正常,但这些小故障让我很恼火。。。矩形可以进入另一个矩形。当矩形在x轴上发生碰撞时(仍然存在左右箭头),不受影响的矩形正在移动。 有什么办法可以摆脱它们吗? 按下键、释放键、移动()和检查碰撞()方法: @覆盖 按下公共无效键(KeyEvent k){ int key=k.getKeyCode(); 开关(钥匙){ case KeyEvent.VK_左: 左=真; game.physic.xVel=2; 打破 case KeyEvent.VK_RIGHT: 右=真; g

请看这张GIF:

碰撞检测正常,但这些小故障让我很恼火。。。矩形可以进入另一个矩形。当矩形在x轴上发生碰撞时(仍然存在左右箭头),不受影响的矩形正在移动。 有什么办法可以摆脱它们吗? 按下键、释放键、移动()和检查碰撞()方法:

@覆盖
按下公共无效键(KeyEvent k){
int key=k.getKeyCode();
开关(钥匙){
case KeyEvent.VK_左:
左=真;
game.physic.xVel=2;
打破
case KeyEvent.VK_RIGHT:
右=真;
game.physic.xVel=2;
打破
case KeyEvent.VK_空间:
//跳跃
打破
违约:
打破
}
}
/*
*game.lvl1.getX()[i]到ablica z wspórzędnymi平台
*/
公开作废动议(){
如果(左){
开关(game.currentLevel()){
案例1:
for(int i=0;igame.lvl1
.getBounds(i.getY()&&isJumping){
/*
*下面的碰撞
*/
游戏。男人。塞提波斯(2);
game.man.isOnGround=false;
打破
}else if(game.man.getBounds().getX()game.lvl1
.getBounds(i.getX()&左){
/*
*右撞
*/
game.lvl1.getX()[i]=2;
左=假;
打破
}
}否则{
game.physic.xVel=2;
game.man.isOnGround=false;
}
}
}
}
@凌驾
公共无效密钥已释放(密钥事件k){
int key=k.getKeyCode();
开关(钥匙){
case KeyEvent.VK_左:
左=假;
game.physic.xVel=0;
打破
case KeyEvent.VK_RIGHT:
右=假;
game.physic.xVel=0;
打破
case KeyEvent.VK_空间:
打破
违约:
打破
}
}
paintLevel()是从paintComponent调用的。paintComponent是从gameloop调用的

private void paintLevel(Graphics2D g2d) {
    switch (currentLevel()) {
    case 1:
        for (int i = 0; i < lvl1.getX().length; i++) {
            g2d.draw(lvl1.getBounds(i));
        }
        break;
    }
}
private void paintLevel(Graphics2D g2d){
开关(currentLevel()){
案例1:
for(int i=0;i
我想说,这是一种非常糟糕的方法。每个关卡都应该有一个形状列表,当你的人移动时,你应该检查碰撞。如果发生碰撞,请不要移动,否则请继续进行位置调整

以下是对当前代码的基本编辑,可能会使调试更容易:

如果你愿意,我可以把我之前的意思写下来,但是你
private void paintLevel(Graphics2D g2d) {
    switch (currentLevel()) {
    case 1:
        for (int i = 0; i < lvl1.getX().length; i++) {
            g2d.draw(lvl1.getBounds(i));
        }
        break;
    }
}