2D游戏中的碰撞

时间:2015-06-02 23:09:18

标签: java swing collision

我试图制作一个小游戏,你可以用箭头控制一个小立方体。当立方体与另一个块对象相交时,我希望它返回并停止在块对象的边缘。所以基本上我希望我的块在它与块对象相交时停止,相反,它会向它移动一点,然后当我再次移动它时它会跳回来。我该怎么做才能首先检查它是否会相交,以及它是否会进入它?

我的绘图课程延伸JPanel,我用paintComponent绘画。

 if(keyCode == e.VK_RIGHT) {
        if(xRightCollision()){
            hero.x -= xVel;
        }
        else {
            hero.x += xVel;
        }
    }

所以,让我们说立方体位于块对象的边缘,但它还没有相交,所以我按向右移动它,我再向右按,然后向后跳5个像素(xVel = 5)。

public boolean xRightCollision(){
    for(int i = 0; i < obstacles.size(); i++) {
        if (hero.intersects(obstacles.get(i))) {
            return true;
        }
    }
    return false;
}

我实际上在JFrame上使用paint()尝试了类似的事情,因为你必须在那里调用repaint(),我可以先检查然后重新绘制。我不太了解paintComponent的工作原理,因为您无法控制何时应该重新绘制。

1 个答案:

答案 0 :(得分:3)

如果立方体与障碍物相交,只需使用临时值检查,并在必要时重置为原始位置:

if(keyCode == e.VK_RIGHT) {
    //backup of the cubes position
    int tmp = hero.x;

    //move the hero to the right
    hero.x += xVel;

    if(xRightCollision())
        //cube intersects with an obstacle -> restore original position
        hero.x = tmp;
}