java - 碰撞检测不起作用?

时间:2013-04-17 22:03:26

标签: java collision

我对java很新。我试图让它能够用箭头键控制球,然后如果你碰到另一个球,它会在控制台中打印出一条线,上面写着“你输了”或者说是“你输了”。

我已经完成了移动,但我正在努力解决我如何让2个球碰撞。到目前为止我已经尝试了这个(我想我在球周围放了一个矩形,但我真的不知道!):

public void collision() {
    Rectangle rectP = new Rectangle(player.x, player.y, player.WIDTH, player.HEIGHT);       
    Rectangle rectE = new Rectangle(Enemy.ex, Enemy.ey, Enemy.WIDTH, Enemy.HEIGHT);

    if(rectP.intersects(rectE))
    {

    System.out.println("game over");
    }
}

有人可以帮我解释我做错了什么。

PS。请不要只给我代码,我想尝试学习!!!。

感谢。

public void actionPerformed(ActionEvent e) {
    repaint();
    x += velx;
    y += vely;
}

public void up() {
    vely = -1.5;
    velx = 0;
}

public void down() {
    vely = 1.5;
    velx = 0;
}

public void left() {
    vely = 0;
    velx = -1.5;
}

public void right() {
    vely = 0;
    velx = 1.5;
}

public void keyPressed(KeyEvent e) {
    int code = e.getKeyCode();
    if (code == KeyEvent.VK_UP) {
        up();
    }
    if (code == KeyEvent.VK_DOWN) {
        down();
    }
    if (code == KeyEvent.VK_LEFT) {
        left();
    }
    if (code == KeyEvent.VK_RIGHT) {
        right();
    }
}

2 个答案:

答案 0 :(得分:0)

如果你有两个球中心的X和Y,你知道球半径 - 这应该是一个简单的任务。

只需计算球心之间的距离,并将其与球半径之和进行比较。

你要求跳过公式以便它:)

PS代码中看起来很奇怪的是player是小写的,但Enemy是大写的..它是类还是对象?

答案 1 :(得分:0)

嗯,我认为碰撞检测没有错。我认为错误的是计算机认为对象在其他地方然后实际存在的地方。就像有一次当我试图制作一个破砖机时,我遇到了碰撞检测问题,而实际上程序认为桨是在另一侧!你应该做的是你应该将矩形的位置绘制到游戏上。这样,您就可以看到计算机认为对象所在的位置。也许他们完全没有了?