我一直在编写游戏引擎,我的演员类有问题。我想确定与矩形(上方)和矩形边的碰撞。我为他们写了两种方法。
public boolean isLeftCollision(Actor actor) {
boolean bool = false;
Rectangle LeftBounds = new Rectangle(x, y, x-velocity, image.getHeight(null));
bool = LeftBounds.intersects(actor.getBounds());
return bool;
}
public boolean isRightCollision(Actor actor) {
boolean bool = false;
Rectangle RightBounds = new Rectangle(x+image.getWidth(null), y, image.getWidth(null)+velocity, image.getHeight(null));
bool = RightBounds.intersects(actor.getBounds());
return bool;
}
这里的速度是下一步的动作。
但他们都给我错误(即错判断)。我怎样才能在演员类中解决这个问题。
答案 0 :(得分:1)
我承认我几乎无法阅读您的代码,如果我的回答没有帮助,我很抱歉。我的猜测是碰撞中的速度会产生误差。根据您检查的频率以及速度保持的值,您可以注册尚未发生的碰撞......
我会分两步完成碰撞检测。
这里有一些伪代码:
Rectangle self_shape=this.getBounds();
Rectangle other_shape=actor.getBounds();
bool collision = self_shape.intersects(other_shape);
if(collision){
//create two new variables self_centerx and self_centery
//and two new variables other_centerx and other_centery
//let them point to the coordinates of the center of the
//corresponding rectangle
bool left=self_centerx - other_centerx<0
bool up=self_centery - other_centery<0
}
通过这种方式,您可以查看其他演员相对于您的位置。如果它在上方或一侧。
答案 1 :(得分:1)
请记住,Rectangle的第三个参数是宽度,而不是另一边的x。所以,你真正想要的可能是这样的:
public boolean isLeftCollision(Actor actor) {
return new Rectangle(x - velocity, y, velocity, image.getHeight(null))
.intersects(actor.getBounds());
}
public boolean isRightCollision(Actor actor) {
return new Rectangle(x + image.getWidth(null), y, velocity, image.getHeight(null))
.intersects(actor.getBounds());
}
(假设速度是向左或向右移动的(正)距离,并且仅调用您正在移动的方向的方法)