如何让玩家遇到障碍并离开(java)

时间:2018-05-07 10:12:02

标签: java collision-detection game-development

这是我的播放器与GRect相交的代码,但它仅适用于rect的两侧。另外2个会产生不良影响。

private void gameLoop() {
    boolean done = false;
    while (!done) {

        if (pan.getBounds().intersects(b.getBounds())) {

            pan.move(-10, -10);
        }

如何让我的玩家“看到”矩形作为障碍并与之发生碰撞? 我正在使用关键的监听器来移动播放器。

修改

我添加了以下if语句来检查玩家与障碍物两侧的交互,但它似乎再次适用于左侧和底部侧。我需要所有四方

我正在使用pan.move,因为当按下某个键时,它就是我用来移动玩家的第一个位置。因此,例如,当我单击左键时,我使用pan.move(-10,0),以防止玩家向左移动我使用pan.move(10,0)

    if (pan.getBounds().intersects(b1.getBounds())) {


        if ((pan.getX() +PAN_WIDTH ) > b1.getX()) {  // left
            pan.move(-10, 0);

        }
        if ((pan.getY() PAN_WIDTH ) > b1.getY()) {  //top
            pan.move(0, -10);

        }
        if ((pan.getY()) < b1.getY() + OBSTACLE_WIDTH) { // bottom
            pan.move(0, 10);

        }
        if ((pan.getX() PAN_WIDTH) < b1.getX() + OBSTACLE_HEIGHT) {  // right
            pan.move(10, 0);

        }
        }

1 个答案:

答案 0 :(得分:0)

您的代码存在很多问题,这里有一些更正。你搞砸了widthheight但是在不知道你所有的代码的情况下,我不能保证你这样做的方式没问题。

if (pan.getBounds().intersects(b1.getBounds())) {

    if ((pan.getX() + pan.getWidth()) > b1.getX()) {  // left
        pan.move(-10, 0);
    } else if (pan.getX() < (b1.getX() + b1.getWidth())) { // right
        pan.move(10,0);
    }

    if ((pan.getY() + pan.getHeight()) > b1.getY()) {  //top
        pan.move(0, -10);
    } else if (pan.getY() < (b1.getY() + b1.getHeight())) { // bottom
        pan.move(0, 10);
    }
}

另外,我建议你将常量更改为getWidth()等方法。在您更改障碍物或玩家的尺寸的情况下,您也不必更改常量。

此外,移动播放器并不是一种好方法。您的播放器应该有两个字段代表您要执行的移动。然后在碰撞的情况下,你只需要将这些字段设置为0.你不希望你的玩家在碰撞时移动,你只是希望它停止向左/向右/向上/向下移动。

例如,如果您更改播放器的速度,则必须手动更改所有这些pan()。如果你没有意识到这一点,那将会给你带来麻烦。