我正在尝试在Character
类中编写一个函数,这样当它与Wall
对象(它是一个平台游戏)的顶部发生碰撞时,它会返回true
。到目前为止,我在Character
类中有这个:
private boolean isTouchingTopOfWall() {
for (Wall wall: game.getPanel().getWalls())
if (getBounds().intersects(wall.getBounds()))
return true;
return false;
}
在Character
和Wall
类中有两个函数,如下所示:
public Rectangle getBounds() {
return new Rectangle(x, y, game.getBlockSize(), game.getBlockSize());
}
除了当Character
对象与Wall
对象的一侧发生碰撞时,它的作用完全不同,当我想要它时它也返回true
,这样它只返回{{当它从顶部发生碰撞时。我怎么能这样做?
感谢。
答案 0 :(得分:0)
如果你总是知道墙的顶部在哪里,你可以添加一张支票以确保它的那一部分
if (getBounds().intersects(wall.getBounds()) &&
wall.intersectPoint == *wall.getTopBounds*) //you'd probably have to write this
return true;
答案 1 :(得分:0)
private boolean isTouchingTopOfWall() {
for (Wall wall: game.getPanel().getWalls())
if (getBounds().intersects(wall.getBounds())) {
int charBottomY = character.getY() + character.getBlockSize();
int wallTopY = wall.getY();
if(charBottomY <= wallTopY)
return true;
}
return false;
}
确定相交后,插入一些代码,确定您是否在墙上。如果你不在墙上,请跳到隔壁。
答案 2 :(得分:0)
private boolean isTouchingTopOfWall() {
for (Wall wall: game.getPanel().getWalls())
if (getBounds().y< wall.getBounds().y) //top wall
return true;
if (getBounds().y + getBounds().getHeight() > wall.getBounds().getHeight())
return true; //bottom wall
return false;
}
只应检查底部和顶部墙(您可以省略),更优雅的方法,但至少您不必更改getWalls()