这是我的播放器与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);
}
}
答案 0 :(得分:0)
您的代码存在很多问题,这里有一些更正。你搞砸了width
和height
但是在不知道你所有的代码的情况下,我不能保证你这样做的方式没问题。
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()
。如果你没有意识到这一点,那将会给你带来麻烦。