繁体   English   中英

2D游戏中的碰撞

[英]Collision in 2D game

我正在尝试制作一个小游戏,其中有一个可以用箭头控制的小方块。 当多维数据集与另一个块对象相交时,我希望它返回并停在块对象的边缘。 因此,基本上,我希望我的块在与块对象相交时停止,而是将块移入其中,然后在再次移动时跳回。 我如何才能使其首先检查它是否相交以及是否不会移动?

我的绘画类扩展了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工作原理,因为您无法控制何时应该重新绘制。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM