确定“重叠”的问题

时间:2014-03-24 14:01:53

标签: java if-statement nested contains

所以我一直试图找到一种方法来确定我正在编写的java游戏的图像中的“重叠”。现在我知道我可以创建一个框来跟随包含它的训练器然后使用包含点来查看教练的盒子是否包含汽车/宠物小精灵的点,但我试图找到另一种方法来解决这个问题。我尝试使用嵌套的If语句,但那些似乎不起作用。如果我的编码有问题,或者我的思考方式有误,请告诉我。下面是嵌套ifs的示例。

if (trainer.getPy() == squirtle.getPy() & trainer.getPx() == squirtle.getPx()){
    if  (trainer.getPy() >= squirtle.getPy() - 50)
        if  (trainer.getPy() <= squirtle.getPy() + 50)
            if  (trainer.getPx() >= squirtle.getPx() -50)
                if  (trainer.getPx() <= squirtle.getPx() + 50)
                    trainer.dead();
    Skully skull = new Skully (trainer.getPx(), trainer.getPy());
}
if (trainer.getPy() == pikachu.getPy() & trainer.getPx() == pikachu.getPx()){
    if  (trainer.getPy() >= pikachu.getPy() - 50)
        if  (trainer.getPy() <= pikachu.getPy() + 50)
            if  (trainer.getPx() >= pikachu.getPx() -50)
                if  (trainer.getPx() <= pikachu.getPx() + 50)
                    trainer.dead();
    Skully skull = new Skully (trainer.getPx(), trainer.getPy());
}

1 个答案:

答案 0 :(得分:0)

问题是你的第一个条件检查两个对象是否在完全相同的位置,所以那些更放松的if之后的语句是没有意义的。相反,您可能只想检查两个对象的中心之间的差异是否小于50px。您可以使用绝对差异轻松检查这一点。

if (Math.abs(trainer.getPy() - squirtle.getPy()) < 50 &&
        Math.abs(trainer.getPx() - squirtle.getPx()) < 50) {
    trainer.dead();
    Skully skull = new Skully (trainer.getPx(), trainer.getPy());
}