对不起,如果标题没有多大意义。我在 Java Eclipse 中制作了一个 Chip's Challenge 风格的游戏,其中像 Player、硬币和可推动块这样的特殊事物是一类。可推块和玩家之间的交互需要大量的碰撞检测逻辑,而且代码变得很糟糕,因为我必须对类的每个实例进行相同的逻辑检查。例如:
public void pb1TouchingBaddy() {
if (pb1.getTileX() == b1.getTileX() & pb1.getTileY() == b1.getTileY()) {
if (b1.getbUp() == 1 & pb1.getTileY() - 1 != pb2.getTileY()) {
pb1.move(0, -1);
} else if (b1.getbDown() == 1
& pb1.getTileY() + 1 != pb2.getTileY()) {
pb1.move(0, 1);
} else if (b1.getbRight() == 1
& pb1.getTileX() + 1 != pb2.getTileX()) {
pb1.move(1, 0);
} else if (b1.getbLeft() == 1
& pb1.getTileX() - 1 != pb2.getTileX()) {
pb1.move(-1, 0);
}
}
if (pb1.getTileX() == b2.getTileX() & pb1.getTileY() == b2.getTileY()) {
if (b2.getbUp() == 1 & pb1.getTileY() - 1 != pb2.getTileY()) {
pb1.move(0, -1);
} else if (b2.getbDown() == 1
& pb1.getTileY() + 1 != pb2.getTileY()) {
pb1.move(0, 1);
} else if (b2.getbRight() == 1
& pb1.getTileX() + 1 != pb2.getTileX()) {
pb1.move(1, 0);
} else if (b2.getbLeft() == 1
& pb1.getTileX() - 1 != pb2.getTileX()) {
pb1.move(-1, 0);
}
}
if (pb1.getTileX() == b3.getTileX() & pb1.getTileY() == b3.getTileY()) {
if (b3.getbUp() == 1 & pb1.getTileY() - 1 != pb2.getTileY()) {
pb1.move(0, -1);
} else if (b3.getbDown() == 1
& pb1.getTileY() + 1 != pb2.getTileY()) {
pb1.move(0, 1);
} else if (b3.getbRight() == 1
& pb1.getTileX() + 1 != pb2.getTileX()) {
pb1.move(1, 0);
} else if (b3.getbLeft() == 1
& pb1.getTileX() - 1 != pb2.getTileX()) {
pb1.move(-1, 0);
}
}
if (pb1.getTileX() == b4.getTileX() & pb1.getTileY() == b4.getTileY()) {
if (b4.getbUp() == 1 & pb1.getTileY() - 1 != pb2.getTileY()) {
pb1.move(0, -1);
} else if (b4.getbDown() == 1
& pb1.getTileY() + 1 != pb2.getTileY()) {
pb1.move(0, 1);
} else if (b4.getbRight() == 1
& pb1.getTileX() + 1 != pb2.getTileX()) {
pb1.move(1, 0);
} else if (b4.getbLeft() == 1
& pb1.getTileX() - 1 != pb2.getTileX()) {
pb1.move(-1, 0);
}
}
所以你可以看到这三个 if 语句块都是完全相同的逻辑,只是应用于同一对象的不同实例。有什么方法可以写这个而不必重复自己这么多?我能够将四个方向的运动逻辑变成一种方法,并一度认为自己是个天才,但我不知道如何做类似的事情,但要使用同一个对象的多个实例。现在,在我太困惑并且无法为另一个块做逻辑之前,我只被两个可推动的块卡住了。不胜感激任何建议,谢谢!